如何旋转矢量和精灵?

时间:2015-01-13 15:24:38

标签: java android vector libgdx coordinates

我需要与载体一起轮换宇宙飞船,我会解释,我从头开始用这个:

Step 1

矢量上的点A是原点,并与航天器的精灵重合。 现在,我的问题是,当航天器旋转时,航天器头部的红点(这是另一个精灵)必须留在头上。

enter image description here

如果我用触摸屏旋转航天器,我可以定期使用红点保留在B点。

这是因为我必须喂太空船,所以我可以将船的原点与红点的点进行比较,以获得它必须继续的方向。

我是libgdx的新手。 我希望我很清楚。

谢谢

我的代码摘录:

    sprite.setPosition(Gdx.graphics.getWidth() / 2 - sprite.getWidth()/2, Gdx.graphics.getHeight() / 2 - sprite.getHeight()/2);
    point.setPosition(sprite.getX() + (sprite.getWidth()/2 - point.getWidth()/2), sprite.getY() + (sprite.getHeight() / 2 + point.getHeight()/2));

    if(Gdx.input.isButtonPressed(Input.Buttons.LEFT)){

        if(Gdx.input.getX() < Gdx.graphics.getWidth() / 2)
        {
            //System.out.println("x: " + Gdx.input.getX() + " - y: " + Gdx.input.getY());
            sprite.setRotation(rotation++);
            point.setPosition(sprite.getX() + (sprite.getWidth()/2 - point.getWidth()/2), sprite.getY() + (sprite.getHeight() / 2 + point.getHeight()/2));
        }
        else
        {
            //System.out.println("x: " + Gdx.input.getX() + " - y: " + Gdx.input.getY());
            sprite.setRotation(rotation--);
            point.setPosition(sprite.getX() + (sprite.getWidth()/2 - point.getWidth()/2), sprite.getY() + (sprite.getHeight() / 2 + point.getHeight()/2));
        }
    }

在回答后编辑 我添加了Actor

的代码
public class MyActor extends Actor {
    Sprite sprite;

    public MyActor() {
        sprite = new Sprite();
        sprite.setTexture(new Texture("rocket.png"));

        setWidth(sprite.getWidth());
        setHeight(sprite.getHeight());
        setBounds(0, 0, getWidth(), getHeight());
        setTouchable(Touchable.enabled);
        setX(200);
        setY(100);
    }

    @Override
    public void draw(Batch batch, float parentAlpha) {
        Color color = getColor();
        batch.setColor(color.r, color.g, color.b, color.a * parentAlpha);
        batch.draw(sprite, getX(), getY());
    }
}

但是我不确定实施......你能给我一些建议吗?

2 个答案:

答案 0 :(得分:1)

旋转红点的方法与旋转飞船的方式相同。只是偏移红点的旋转中心,在太空船旋转点的同一位置。所以不要围绕它的中心旋转红点,而是围绕飞船中心旋转。

答案 1 :(得分:0)

我建议您使用Actor代替Sprite

您可以访问许多精灵不具备的更高级功能。

您甚至可以根据需要对演员进行分组并旋转组。

参考: Scene2D

希望这有帮助。
祝你好运。