提问者:小点点

Libgdx和Box2d/粒子不跟随物体


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

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


共1个答案

匿名用户

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

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