1

Flashdevelopを使用してHaxeNMEでゲームを設計しています。画面上にオブジェクトがあり、マウスの移動に合わせてオブジェクトを回転させてマウスに追従させたい。オブジェクトをマウスと同じ速度で回転させていますが、マウスの方を向いていません。それは、私のマウスが動くたびに動く幻のマウスが画面上にあるようなものです。

これは、マウスが位置を変更するたびに呼び出されるコードです。

public function mouseProcess(e:MouseEvent) 
{
    var Xdistance:Float = e.localX - survivor.x;
    var Ydistance:Float = e.localY - survivor.y;
    survivor.rotation = Math.atan2(Ydistance, Xdistance) * 180 / Math.PI;
}

e.localX/Yマウスと生存者の現在のx、y位置を取得します。x / yは、回転する必要のあるオブジェクトのx、y位置を取得します。

ありがとう

4

2 に答える 2

1

私はあなたの方法に何も悪いことを見つけることができませんでした。次のコードで(ほぼ)逐語的に使用して、マウスを動かしたときにマウスを追跡するスプライトを設定しました。おそらく私が書いたものを見て、それがあなたが持っているコードと異なるかどうかを確認してください。それが失敗した場合は、おそらくあなたがしたことをもっと投稿しますか?

// Creates the sprite that will visually track the mouse.
private function CreateSurvivor() : Sprite
{
    // Create a green square with a white "turret".
    var shape = new Shape();
    shape.graphics.beginFill(0x00FF00);
    shape.graphics.drawRect(0, 0, 100, 100);
    shape.graphics.beginFill(0xFFFFFF);        
    shape.graphics.drawRect(50, 45, 50, 10);
    shape.graphics.endFill();

    // Center the square within its outer container.  Allows it to spin 
    // around its center point.
    shape.x = -50;
    shape.y = -50;

    var survivor = new Sprite();
    survivor.addChild(shape);

    return survivor;
}

initメソッドは、サバイバーを作成して表示リストに添付するだけです。

private function init(e) 
{
    m_survivor = CreateSurvivor();
    m_survivor.x = 300;
    m_survivor.y = 200;

    addChild(m_survivor);

    stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseProcess);
}

そして最後に、あなたの元の方法:

public function mouseProcess(e:MouseEvent) : Void
{
    var Xdistance:Float = e.localX - m_survivor.x;
    var Ydistance:Float = e.localY - m_survivor.y;
    m_survivor.rotation = Math.atan2(Ydistance, Xdistance) * 180 / Math.PI;
}

お役に立てれば。

于 2013-01-18T10:00:47.653 に答える
1

これが NME で異なるかどうかはわかりませんが、FlashMath.atan2()は左を指す 0 (負の x) から始まる値を与えますが、表示オブジェクトは上を指す 0 から始まるので、単純+ 90に角度を追加すると効果がありますか?

于 2013-01-18T13:55:49.277 に答える