繁体   English   中英

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

[英]How to move a sprite relative to another sprite's 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);

您需要更改origin -旋转精灵的圆点。

您的问题是,火箭和火焰都绕着自己的中心旋转,但是您想同时绕着火箭的中心旋转。 然后,需要用火箭中心的位置设置火焰精灵的原点。

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

如您15 - flame.height由于设置了此位置,因此SPACE_BETWEEN_ROCKET_AND_FLAME值为15 - flame.height

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM