2016-05-23 2 views
0

В моей игре у меня есть ракетный спрайт, а на дне ракеты есть анимированный пламенный спрайт, я хочу, чтобы пламенный спрайт совпал с дном ракеты, когда ракета вращается.Как переместить спрайт относительно вращения другого спрайта?

Это ракета, когда начинается игра, все в порядке:

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 - точка Arround которой ваш спрайт будет повернут.

Ваша проблема заключается в том, что как ракета, так и пламя вращаются вокруг своих собственных центров, но вы скорее захотите повернуть их как на раструбную раковину. Затем вам нужно установить источник огненного спрайта в положение центра ракеты.

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

Когда я, что мой спрайт перемещается в другое положение. и я хочу использовать верхний центр пламени для случайного масштабирования пламени. Может быть, есть формула, которую я могу использовать для перевода пламени относительно положения ракет? – Harry

+0

Хм, что означает, что он перемещается в другую позицию? Насколько я знаю, источник не имеет ничего общего с позицией, поэтому он не должен действовать как таковой - можете ли вы использовать общий снимок экрана? Если мы говорим о других вариантах, я думаю, что вы должны правильно перевести пламя с помощью объекта Vector2 и вращения, хотя я довольно удивлен, что манипуляции с происхождением недостаточно ... –

Смежные вопросы