在libgdx java中运行时旋转粒子

时间:2015-10-28 23:44:23

标签: java libgdx

我的粒子开始向上射击。

然而,如果你拍摄"咒语"随着你右边的粒子,我想旋转整个发射器-90度,使它向右射击而不是向上射击。

如何做到这一点。

这是我的拍摄权,粒子向上爆炸,这很奇怪所以我希望它以-90度的角度拍摄,如果我像下图一样向右拍摄

example image

1 个答案:

答案 0 :(得分:0)

您可以获取效果的控制器并将旋转设置为它。控制器本身就是一个发射器。此外,您可以通过在运行时设置旋转来旋转整个效果。

使用给定的四元数调用Effect.rotate(Quaternion rotation); (See this),您需要在演员中自行更新并调用旋转。但是旋转本身受到控制器/发射器更新的影响!

如果要旋转效果的一部分(如1或2个发射器不是全部)使用findController(string name) klick here按名称(在GUI中设置)获取发射器并设置如上所述旋转到Controller

我几乎不建议不要使用射向一个方向的效果! Insead我会使用一个没有向一个方向移动的效果,然后移动效果,最终具有相同的效果,但你可以指向哪个方向。我的意思的一个小例子:

public class SimpleRocket extends Firework {
    private ParticleEffect boom, thrust;
    private Vector2 direction;
    private boolean secondeffect = false;

    public SimpleRocket(FireworkTycoonMain main) {
        super(main);

        boom = new ParticleEffect();
        boom.load(Gdx.files.internal("effect/firework.p"),
                main.manager.getAtlas());
        thrust = new ParticleEffect();
        thrust.load(Gdx.files.internal("effect/goldregen.p"),
                main.manager.getAtlas());

        thrust.start();
    }

    public void init(float mass, float acceleration, Vector2 startdirection,
            int flytime) {
        this.thrust.setDuration(flytime);
        this.mass = mass;
        this.acceleration = acceleration;
        direction = startdirection;
        direction.nor();
    }

    @Override
    public void act(float delta) {

        final float alpha = direction.getAngleRad();

        final float y = (float) (Firework.GRAVITY * mass + acceleration
                * Math.sin(alpha) * delta * delta);

        final float x = (float) (acceleration * Math.cos(alpha) * delta * delta + wind);

        direction.x = x;
        direction.y = y;
        direction.nor();

        setPosition(getX() + x, getY() + y);

        boom.setPosition(getX(), getY());
        thrust.setPosition(getX(), getY());

        thrust.update(delta);
        boom.update(delta);

        if (thrust.isComplete() && !secondeffect) {
            main.sound.playPeng();
            boom.start();
            secondeffect = true;
        }
    }

    @Override
    public void draw(Batch batch, float alpha) {
        if (!boom.isComplete()) {
            boom.draw(batch);
        }
        if (!thrust.isComplete()) {
            thrust.draw(batch);
        }
    }
}

这个例子很旧,所以在较新的libgdx版本上它可能不正确。 enter image description here

enter image description here

如果你对广泛的效果(不是一个点)做同样的事情,它可能看起来像你的效果,但你可以随意移动它。