如何相对于另一个精灵的旋转移动精灵?

时间:2016-05-23 10:16:04

标签: java android libgdx

在我的游戏中我有一个火箭精灵,在火箭的底部有一个动画火焰精灵,我希望火焰精灵在火箭旋转时与火箭底部对齐。

这是比赛开始时的火箭,一切都还好:

Initial position

但是当我旋转火箭时,火焰不会像火箭的底部那样对齐:

After rotation

如何使其对齐?

这是我的代码:

    // draw rocket
    rocketSprite.setRegion(AssetLoader.rocketTexture);
    rocketSprite.setPosition(rocket.getX(), rocket.getY());
    rocketSprite.setOrigin(rocket.getWidth() / 2, rocket.getHeight() / 2);
    rocketSprite.setSize(rocket.getWidth(), rocket.getHeight());
    rocketprite.setRotation(rocket.getRotation());
    rocketSprite.setScale(1, 1);
    rocketPodSprite.draw(game.batch);


    //flame width and height
    int w = 70;
    int h = 20;

    // randomly change scale of flame for effects
    float sw = MathUtils.random(2f / 7f, 1);
    float sh = MathUtils.random(0.5f, 1);

    // draw flame
    flameSprite.setRegion(AssetLoader.flameTexture);
    flameSprite.setPosition(rocket.getX() + rocket.getWidth() / 2 - w, rocket.getY() - 15);
    flameSprite.setOrigin(w, h / 2);
    flameSprite.setSize(w, h);
    flameSprite.setRotation(rocket.getRotation());
    flameSprite.setScale(sw, sh);
    flameSprite.draw(game.batch);

1 个答案:

答案 0 :(得分:2)

你需要改变origin - 你的精灵旋转的点数。

你的问题是火箭和火焰都在它们自己的中心周围旋转,但是你宁愿将它们旋转到火箭的周围。然后你需要设置火焰精灵原点与火箭中心的位置。

    flameSprite.setOrigin(w, h / 2 + rocket.getHeight() / 2 + SPACE_BETWEEN_ROCKET_AND_FLAME);

正如我在您的情况中看到的那样,SPACE_BETWEEN_ROCKET_AND_FLAME由于此职位设置而具有15 - flame.height的值:

    flameSprite.setPosition(rocket.getX() + rocket.getWidth() / 2 - w, rocket.getY() - 15);