我如何在libgdx中使用sprite爆炸效果..?

时间:2015-03-26 12:31:17

标签: java libgdx box2d

我正在尝试在libgdx中开发一个游戏,我想在它点击它时使用sprite的爆炸效果。是否可以使用BOX2D物理来应用爆炸效果。?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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

我也正在实施一些重力效应 - 在每一帧中我都会降低VY的某个常数(乘以该delta时间 - 自上次帧渲染以来的时间,以便不断移动)。

最后你应该检查什么时候删除粒子对象。即当它的坐标在屏幕之外或经过一段时间之后......

为了使它更加美观,你可以为粒子设置动画......使用透明度......

答案 2 :(得分:0)

一种简单的方法就是通过使用粒子来实现你想要的东西

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

答案 3 :(得分:0)

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

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){...}
}

然后,当用户单击Texture时,您将实例化大量这些粒子并将它们添加到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
}

在渲染代码中,您为arraylist中的每个元素绘制粒子纹理:

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

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

也很重要: 另一点需要提及的是,这种技术会产生大量的物体,导致重型GC跟随。您可以使用Pooling技术来减少这种情况。 LibGDX有一些非常好的类。