我如何在 libgdx.. 中对精灵使用爆炸效果?

How could i use explode effect with a sprite in libgdx..?

我正在尝试在 libgdx 中开发一款游戏,其中我希望在单击它时使用 sprite 的爆炸效果。是否可能,或者我应该使用 BOX2D 物理来应用爆炸效果。?

您应该使用为您处理动画的 API,或者如果您想使用粒子,您必须使用为您提供发射器的 API。

我正在自己制作爆炸效果。对于每个粒子对象,我都有保存 X 和 Y 坐标的变量,在 VX 和 VY 中,我保存粒子速度。

当爆炸发生时,我正在创建一些这样的对象(我将它们存储在一个列表中)。对于这些粒子中的每一个,我都将 X 和 Y 坐标设置为其自身的爆炸坐标。所以他们都从同一点开始。但是我为每个粒子设置了不同的随机 VX 和 VY(初始速度)。所以他们会开始向不同的方向移动。

我还实现了一些重力效果 - 在每一帧中,我都将 VY 降低某个常数(乘以该增量时间 - 自上一帧渲染以来的时间,以获得持续移动)。

最后你应该以某种方式检查何时删除粒子对象。 IE。当它的坐标超出屏幕或一段时间后...

为了让它更漂亮,您可以为粒子设置动画...使用透明度...

实现您想要的效果的一种简单方法是使用粒子

我猜你的游戏是 2d 所以 here 是关于 2d 粒子的官方 wiki

正如 MilanG 所说,最简单的方法是创建一个粒子 class

public class Particle{
    public float x;
    public float y;
    public float vx;
    public float vy;

    public Particle(float x, float y, float vx, float vy){...}
}

然后当用户单击纹理时,您将实例化大量这些粒子并将它们添加到 ArrayList。 X 和 Y 坐标应该是纹理的中心。 vx 可以是随机数(负数和正数)。 vy 也可以是随机数,具体取决于粒子的视觉效果。稍微试验一下这些值

for(int i = 0; i < 100; i++){
    arrayList.add(new Particle(textureX,
                               textureY,
                               MathUtils.randomFloat(-200, 200),
                               MathUtils.randomFloat(0, 200)));
}

在更新循环中,您将根据 vx 和 vy 值更改 x 和 y 坐标。由于重力原因,应降低 vy 值:

for(Particle p : arrayList){
    p.x += p.vx * delta;
    p.y += p.vy * delta;
    p.vy += -200 * delta; // -200 is gravity value
}

在渲染代码中,为数组列表中的每个元素绘制粒子纹理:

for(Particle p : arrayList){
    batch.draw(particleTexture, p.x, p.y);
}

重要: 您还需要实现一些逻辑以从 arrayList 中删除粒子(例如检查 x 和 y 坐标边界以及 CopyOnWriteArrayList 或第二个 deleteParticles ArrayList)

同样重要: 另一点要提到的是,这种技术会生成大量对象,从而导致严重的 GC。您可以使用 Pooling 技术来减少它。 LibGDX 有一些非常不错的 class。