Я делаю игру с космическим кораблем, и при нажатии кнопки «вперед» должно появиться изображение огня, выходящего сзади. Это работает, но только когда космический корабль стоит вертикально. Когда он переворачивается вверх дном, он не идеально выровнен с задней частью космического корабля. Это функция обновления класса, которую я сделал для нее.
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] Новые фотографии