Libgdx和Box2d/粒子不是跟随实体

Libgdx和Box2d/粒子不是跟随实体,libgdx,box2d,particles,Libgdx,Box2d,Particles,我就开门见山了。 所以我在做这个游戏,你应该用你的咒语杀死其他物体,我创造了子弹和它们的身体,我们都很好,这很有效。 但我想让它看起来特别和神奇,所以我决定使用粒子。我制作了粒子,把它们放在子弹体后面,并用下面的代码: for (Bullet bullet : bullets) { bullet.update(dt); if (!bullet.destroyed){ fireFx.start();

我就开门见山了。 所以我在做这个游戏,你应该用你的咒语杀死其他物体,我创造了子弹和它们的身体,我们都很好,这很有效。 但我想让它看起来特别和神奇,所以我决定使用粒子。我制作了粒子,把它们放在子弹体后面,并用下面的代码:

 for (Bullet bullet : bullets) {
            bullet.update(dt);
            if (!bullet.destroyed){
                fireFx.start();
                fireFx.setPosition(bullet.getPosition().x, bullet.getPosition().y);
                fireFx.update(dt);
            }
        }
但当我发射多发子弹时,会出现一个问题,粒子从我发射的所有第一发子弹中消失,并出现在最后一发子弹上。有人能告诉我这件事吗

---------编辑---------

现在我遇到了另一个问题,当子弹与物体碰撞时,它会被破坏,渲染方法停止工作,但我希望它继续渲染,直到动画结束。就像我不想让它们突然消失一样这是我的代码:

for(int i = 0; i<bullets.size; i++){
        if(!bullets.get(i).destroyed && !bullets.get(i).fireFx.isComplete()) 
                bullets.get(i).fireFx.draw(game.batch);
    }

fireFx.isComplete无法正常工作原因是什么?

问题在于,您正在更新单个粒子,使其具有列表中所有项目符号的坐标,并有效地保留列表中最后一个项目符号的坐标。您可以维护将项目符号映射到粒子的贴图,但我会在创建项目符号时实例化fireFx对象并将其添加到项目符号对象。然后,在Bulletupdate方法中,可以调用粒子更新方法:

public void update(float dt) {
    [...]
    if ( !this.isDestroyed()) {
        [...]
        this.fireFx.start();
        this.fireFx.setPosition(this.getPosition().x, this.getPosition().y);
        this.fireFx.update(dt);
        [...]
    }
    [...]
}

分别为每个粒子创建粒子bullet@AbhishekAryan我该怎么做?我尝试过创建ArrayList,但似乎不起作用://fireFx的类型是什么?“isComplete”上的文档说明了什么?@MichaëlDemey这是一个ParticleEffect,文档中没有说明任何内容。但是它用于重置一些教程上的效果,比如:ifparticleFx.isComplete{particleFx.reset;},所以我认为它正在检查是否完成了动画制作。谢谢你,这确实有效,但现在我遇到了另一个问题,我似乎无法解决它。。如果你能看一下,我会修改我的问题^^