Libgdx 和 Box2d / 粒子不跟随物体
Libgdx and Box2d / Particles are not following bodies
我开门见山。
所以我正在制作这个游戏,你应该用你的法术杀死其他 objects 我已经创造了子弹和他们的身体我们都很好它正在工作。
但我想让它看起来特别 "magiclike" 所以我决定使用粒子。我已经制作了粒子并使用以下代码放置并使它们跟随子弹体:
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() 无法正常工作,原因是什么?
问题是您正在更新单个粒子以包含列表中所有项目符号的坐标,并有效地保留列表中最后一个项目符号的坐标。您可以维护一个将 Bullets 映射到 Particles 的 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);
[...]
}
[...]
}
我开门见山。 所以我正在制作这个游戏,你应该用你的法术杀死其他 objects 我已经创造了子弹和他们的身体我们都很好它正在工作。 但我想让它看起来特别 "magiclike" 所以我决定使用粒子。我已经制作了粒子并使用以下代码放置并使它们跟随子弹体:
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() 无法正常工作,原因是什么?
问题是您正在更新单个粒子以包含列表中所有项目符号的坐标,并有效地保留列表中最后一个项目符号的坐标。您可以维护一个将 Bullets 映射到 Particles 的 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);
[...]
}
[...]
}