Java 如何在libgdx中对精灵使用爆炸效果。。?

Java 如何在libgdx中对精灵使用爆炸效果。。?,java,libgdx,box2d,Java,Libgdx,Box2d,我正试图在libgdx中开发一个游戏,当我点击它时,我想在其中使用sprite的爆炸效果。有没有可能或者我应该使用BOX2D physics来应用爆炸效果?你应该使用为你处理动画的API,或者如果你想使用粒子,你必须使用为你提供Emmiter的API。我自己在做爆炸效果。对于每个粒子对象,我都有保持X和Y坐标的变量,在VX和VY中,我保持粒子速度 当爆炸发生时,我会创建一些这样的对象(我将它们存储在一个列表中)。对于这些粒子中的每一个,我都设置了X和Y坐标,以及它自身的坐标。所以它们都从同一点开

我正试图在libgdx中开发一个游戏,当我点击它时,我想在其中使用sprite的爆炸效果。有没有可能或者我应该使用BOX2D physics来应用爆炸效果?

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

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

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

我还实现了一些重力效果——在每一帧中,我都将VY减少一些常数(乘以自上一帧渲染以来的增量时间,以获得恒定的移动)

最后,您应该以某种方式检查何时删除粒子对象。也就是说,当它的坐标不在屏幕上,或者过了一段时间后


为了使它更漂亮,你可以设置粒子的动画…使用透明度

实现目标的一个简单方法是使用粒子


我猜你的游戏是2d的,关于2d粒子的官方维基也是一样,正如MilanG所说,创建粒子类的最简单方法是ist

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)));
}
在渲染代码中,为arraylist中的每个元素绘制粒子纹理:

for(Particle p : arrayList){
    batch.draw(particleTexture, p.x, p.y);
}
重要提示: 您还需要实现一些逻辑来从arrayList中删除粒子(例如,与CopyOnWriteArrayList或第二个deleteParticles arrayList一起检查x和y坐标边界)

同样重要: 另一点需要提及的是,该技术生成了大量对象,导致大量GC跟进。您可以通过使用池技术来减少这种情况。LibGDX为此提供了一些非常好的类

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