[英]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.