2016-05-23 102 views
0

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

这是火箭在比赛开始的时候,一切都OK了:

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); 

回答

2

您需要更改origin - 点以防万一,你的精灵将被旋转。

你的问题是,火箭和火焰都围绕自己的中心旋转,但你更愿意旋转它们两个圆形火箭的一个。然后你需要设置火焰精灵的起源与火箭中心的位置。

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

当我看到你的情况SPACE_BETWEEN_ROCKET_AND_FLAME15 - flame.height值,由于这个位置设定:

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

当我这样做,我的精灵移动到不同的位置。我想用火焰的顶部中心随机缩放火焰精灵。也许有一个公式可以用来翻译火焰相对于火箭的位置? – Harry

+0

嗯这是什么意思,它移动到不同的位置?据我所知,起源与位置没什么共同之处,所以它不应该这样做 - 你能分享一些截图吗?如果我们正在谈论另一种选择,我认为你应该能够正确地使用Vector2对象和旋转来翻译你的火焰,虽然我很惊讶,原始操纵是不够的...... –

相关问题