Спрайт libgdx вращается неправильно

Я делаю игру с космическим кораблем, и при нажатии кнопки «вперед» должно появиться изображение огня, выходящего сзади. Это работает, но только когда космический корабль стоит вертикально. Когда он переворачивается вверх дном, он не идеально выровнен с задней частью космического корабля. Это функция обновления класса, которую я сделал для нее.

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]

Картинки

В вертикальном положении: В вертикальном положении

При повороте на бок: Когда горизонтально

[РЕДАКТИРОВАТЬ 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] Новые фотографии

введите здесь описание изображения

введите здесь описание изображения


person DreamsInHD    schedule 28.04.2017    source источник
comment
Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат.   -  person Bhargav Rao    schedule 30.04.2017


Ответы (1)


Вместо того, чтобы вращать спрайт, вы можете напрямую вращать текстуру, когда рисуете ее в пакете. Я дал тот же ответ в другом месте, и это работает для всех. Вот ссылка на мой ответ:

Как я могу повернуть изображение по оси x в libgdx?

person Sagar Balyan    schedule 29.04.2017
comment
Спасибо, но я думаю, что проблема здесь связана с положением, потому что вращение всегда правильное, но оно не нарисовано в правильном месте, потому что я всегда вычитаю одно и то же количество из положения y, когда это количество должно быть вычтено из положение x, когда оно горизонтально - person DreamsInHD; 29.04.2017