java arraylist 对象 删除_Java-ArrayList对象未正确删除

我正在为上一个HS年项目开发2D平台游戏.

游戏基本上是关于玩家后退&前进,收集点数并达到目标…玩家可以发射子弹,当子弹击中障碍物时,它会被摧毁.现在,我想使用所谓的“粒子”对象添加爆炸效果.我已经为此写了经理类,它似乎是第一次工作,但是拍摄了几次之后,我注意到粒子不再被删除,它们只是继续并离开屏幕.生命周期限制为500ns.

我还注意到,如果我在游戏开始后立即发射子弹,效果就会达到预期的效果.但是等待了几秒钟然后发射了子弹后,效果粒子的行为却不尽如人意.

这是我开始游戏后立即发射子弹的样子(应该是这样):

kCS66.gif

这是经过几秒钟后才发射子弹的样子.

ca74b.gif

ParticleManager.java

public class ParticleManager {

private ArrayList particles;

private ArrayList removeParticles;

public ParticleManager() {

particles = new ArrayList();

removeParticles = new ArrayList();

}

public int getListSize() {

return particles.size();

}

/*

Generate particles

*/

public void genParticle(int x, int y, int amount) {

for(int i = 0; i < amount; i++) {

particles.add(new Particle("explosion" , x,y, i));

}

}

public void update() {

// Iterate trough particle objects

// update them & check for lifeTime

for(Particle p: particles) {

// Updating particle object before

// checking for time lapse

p.update();

// Append outdated particles to removeParticles

// if time limit has passed

if(System.nanoTime() - p.timePassed >= Config.particleLife) {

removeParticles.add(p);

}

}

// finally, delete all "remove-marked" objects

particles.removeAll(removeParticles);

}

public void render(Graphics2D g) {

for(Particle p: particles) {

p.render(g);

}

}

}

粒子.java

class Particle {

private double px, py, x, y;

private int radius, angle;

public long timePassed;

String type;

public Particle(String type, double x, double y, int angle) {

this.x = x;

this.y = y;

this.radius = 0;

this.angle = angle;

this.timePassed = 0;

this.type = type; // explosion, tail

}

public void update() {

px = x + radius * Math.cos(angle);

py = y + radius * Math.sin(angle);

radius += 2;

this.timePassed = System.nanoTime();

}

public void render(Graphics2D g) {

g.setColor(Color.WHITE);

g.fillOval((int)px, (int)py, 5, 5);

}

}

我还没有弄清楚我在做什么错,我已经搜索了一些东西,有一次我遇到一个答案,提到某些引用由于某种原因没有被直接删除…

我的问题是“经过一定时间后如何使这些粒子消失?-如第一个GIF中所示”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值