2016-05-23 9 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を変更する必要がある - あなたのスプライトを回転される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オブジェクトと回転を使って正しく炎を翻訳できなければならないと思いますが、起点操作では不十分です –

関連する問題