我正在用宇宙飞船制作游戏,当按下前进按钮时,必须出现从后面出来的火焰图像。这只有当宇宙飞船站立时才有效。当它倒置时,它与宇宙飞船的后部不完全对齐。这是我为它制作的类的更新功能。
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] 新图片
答案 0 :(得分:0)
当您将纹理绘制到批处理时,可以直接旋转纹理,而不是旋转精灵。我在其他地方给出了相同的答案,它适用于所有人。这是我的回答的链接: