【问题标题】:Libgdx and Box2d / Particles are not following bodiesLibgdx 和 Box2d / 粒子不跟随物体
【发布时间】:2017-08-02 23:54:58
【问题描述】:

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

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

【问题讨论】:

  • 为每个子弹单独创建粒子
  • @AbhishekAryan 我该怎么做?我试过创建一个 ArrayList 但它似乎不起作用 ://
  • fireFx 的类型是什么?文档在 isComplete() 上说了什么?
  • @MichaëlDemey 这是一个 ParticleEffect,它在文档中什么也没说。但它用于重置某些教程的效果,例如: if(particleFx.isComplete()){particleFx.reset();所以我认为它正在检查它是否完成动画..

标签: libgdx box2d particles


【解决方案1】:

问题在于您正在更新单个粒子以获取列表中所有项目符号的坐标,并有效地保留列表中最后一个项目符号的坐标。您可以维护一个将 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);
        [...]
    }
    [...]
}

【讨论】:

  • 谢谢你确实有效,但现在我遇到了另一个问题,我似乎无法解决它。如果你能看一下,我会编辑我的问题^^
猜你喜欢
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多