Libgdx和Box2d / Particles不遵循正文

时间:2017-08-02 23:54:58

标签: libgdx box2d particles

我会切入追逐。 所以我正在制作这个游戏你应该用你的法术杀死其他物体我已经制造了子弹和他们的身体我们都很好它正在工作。 但我想让它看起来特别和“神奇”,所以我决定使用粒子。我已经制作了这些粒子并使用这段代码使它们跟随子弹体:

 for (Bullet bullet : bullets) {
            bullet.update(dt);
            if (!bullet.destroyed){
                fireFx.start();
                fireFx.setPosition(bullet.getPosition().x, bullet.getPosition().y);
                fireFx.update(dt);
            }
        }

但是当我发射多个子弹时,有一个问题是粒子刚刚从我发射的所有第一个子弹中消失,并且只出现在最后一个子弹上。请有人带我上这个吗?

----------------- EDIT -----------------

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

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()工作不正常是什么原因?

1 个答案:

答案 0 :(得分:1)

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

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