libgdx sprite无法正确旋转

时间:2017-04-28 15:48:19

标签: java libgdx box2d

我正在用宇宙飞船制作游戏,当按下前进按钮时,必须出现从后面出来的火焰图像。这只有当宇宙飞船站立时才有效。当它倒置时,它与宇宙飞船的后部不完全对齐。这是我为它制作的类的更新功能。

public void update(Rocket rocket) {
    sprite.setOrigin(rocket.getOriginX(), rocket.getOriginY()+Constants.ROCKET_HEIGHT);
    sprite.setSize(Constants.ROCKET_BOOST_WIDTH, Constants.ROCKET_BOOST_HEIGHT);
    sprite.setPosition(rocket.getPosition().x - sprite.getWidth()/2, rocket.getPosition().y-Constants.ROCKET_HEIGHT);
    sprite.setRotation(rocket.getBody().getAngle()* MathUtils.radDeg);
}

我已经尝试将原点设置为火箭的原点,这对我来说似乎是合乎逻辑的,但我想我并不完全明白它的来源。

[编辑1]

我不认为问题出在原点,我现在把它设置为

sprite.setOriginCenter();

我认为问题与我总是将y设置为rocket.getPosition().y-Constants.ROCKET_HEIGHT这一事实有关(从火箭出来的火焰高度是火箭高度的一半,宽度相同),只有在火箭垂直站立时才有效,但是当火箭站在它的一侧时,它需要从位置的x值中减去。我仍然不知道如何解决这个问题,而且我在游戏的不同部分遇到了类似的问题。如果有人能解决这个问题,那将非常有帮助,因为我没有线索。

[编辑2]

图片

垂直时: When Vertical

当转向它时: When Horizontal

[编辑3] 所有代码

public class RocketBoostDraw {
        private Sprite sprite;
        private Texture texture;
        private float offset = 0;

        public RocketBoostDraw(Rocket rocket) {
            texture = new Texture(Gdx.files.internal("boost.png"));
            sprite = new Sprite(texture);
            sprite.setSize(Constants.ROCKET_BOOST_WIDTH, Constants.ROCKET_BOOST_HEIGHT);
            sprite.setPosition(rocket.getPosition().x, rocket.getPosition().y - Constants.ROCKET_HEIGHT);
            offset = Constants.ROCKET_HEIGHT/2 + sprite.getHeight()/2;
        }

        public void update(Rocket rocket) {
            sprite.setPosition(rocket.getPosition().x + offset * MathUtils.cosDeg(rocket.getRotation()), rocket.getPosition().y+(offset)*MathUtils.sinDeg(rocket.getRotation()));
            sprite.setRotation(rocket.getBody().getAngle()* MathUtils.radDeg);
        }

        public void draw(SpriteBatch batch, Rocket rocket) {
            sprite.draw(batch);
        }
    }

[编辑4] 新图片

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

当您将纹理绘制到批处理时,可以直接旋转纹理,而不是旋转精灵。我在其他地方给出了相同的答案,它适用于所有人。这是我的回答的链接:

How can i rotate an image over its x axes in libgdx?