我正在和一艘宇宙飞船做游戏,当按下前进按钮时,必须出现从后面冒出的火的图像。这是有效的,但只有当宇宙飞船垂直站立时。当它颠倒时,它与飞船的后部并不完全对齐。这是我为它创建的类的update函数。
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张新图片


发布于 2017-04-29 14:36:02
而不是旋转精灵,你可以直接旋转你的纹理,当你绘制它到批次。我在其他地方也给出了同样的答案,它对每个人都有效。以下是我的答案的链接:
https://stackoverflow.com/questions/43684195
复制相似问题