当前位置: 首页 > 知识库问答 >
问题:

Libgdx和Box2d/粒子不跟随物体

胡翔
2023-03-14

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

 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个答案

越心水
2023-03-14

问题是您正在更新单个粒子以获得列表中所有子弹的坐标,并有效地保留列表中最后一个子弹的坐标。您可以维护一个将子弹映射到粒子的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);
        [...]
    }
    [...]
}
 类似资料:
  • 我想把它集成到libgdx中。Liquidfun看起来不错,但我听说它给可移植性带来了问题,而且不能很好地与桌面应用程序配合使用。根据我的理解,libgdx中的粒子效应并不遵循粒子所涉及的物理,所以我认为我也不应该走那条路。

  • 问题内容: 谁能给我一个很好的例子,说明在libGDX中从哪里开始制作粒子系统?我已经看过libGDX源代码中的测试示例,但是仍然很难理解。也许对此做个很好的解释会有所帮助。我想我想用很多五颜六色的粒子进行某种爆炸。任何帮助是极大的赞赏! 问题答案: 在游戏类中定义粒子效果: 初始化它: 在您的方法中,将其放置在要发射粒子的位置(爆炸位置): 最后绘制(也在内): 就这样,非常简单明了。 另一件事

  • 在libgdx中抽签背景中移动的大量粒子(圆)的最佳方法是什么?在后台运行的200个粒子是我可以从我的应用程序中得到的。上面的任何东西都会让我的应用结巴。我实际测试了一个应用程序,它可以在后台运行多达200000个粒子,而不需要牺牲FPS。这是我的游戏课简而言之:

  • 问题内容: 我刚刚开始使用libgdx创建游戏。它是使用scene2d ui的自上而下的2d射击游戏。现在我想,我可以在某些程度上增加黑暗和光明,但是我不想使用box2d重写所有内容。我不需要逼真的阴影,只需某种环境光和围绕我角色的光圈即可,不受周围墙壁和其他障碍物的影响。所以我想知道libgdx中是否有任何照明系统?或者我可以不使用box2d物体/世界而使用box2dlights吗?谢谢 问题答

  • 世界重力设置为-9.81f增加重力改变球速,但我想成为一个“真正的”模拟。我在一篇帖子中读到,可能是因为像素与米的比例是1:1。但是我不知道如何在不破坏舞台的情况下改变这个比例。我将不胜感激。

  • 我正在使用ContactListener测试box 2D中两个物体之间的碰撞 这是我在世界上使用的所有contactListener类。设置ContactListener(new Box2DWorld(this))以添加它 我的dedub是这样的 beginContact preSolve postSolve。preSolve postSolve beginContact preSolve END