[英]libgdx sprite not rotating correctly
我正在使用飞船进行游戏,当按下前进按钮时,必须出现从后方冒出的火焰图像。 这仅在飞船垂直站立时有效。 当它上下颠倒时,它与飞船的背面并不完全对齐。 这是我为此所做的类的更新功能。
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]新图片
无需旋转精灵,而是可以在将其绘制到批次时直接向右旋转纹理。 我在其他地方也给出了相同的答案,它适用于所有人。 这是我的答案的链接:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.