0

前方に押すと、キャラクターがマウスポインターに向かって移動し、矢印キーを使用して左右に移動するゲームを作成しています。

これが私の現在のコードです:

import flash.events.MouseEvent;
//Event Listners
stage.addChild(crosshair_mc);
crosshair_mc.mouseEnabled = false;
crosshair_mc.addEventListener(Event.ENTER_FRAME, fl_CustomMouseCursor);

function fl_CustomMouseCursor(event:Event)
{
    crosshair_mc.x = stage.mouseX;
    crosshair_mc.y = stage.mouseY;
}
Mouse.hide();

stage.addEventListener(MouseEvent.MOUSE_MOVE,facecursor);
stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler);
//Functions
function facecursor(event):void
{
    character_mc.rotation = (180 * Math.atan2(mouseY - character_mc.y,mouseX - character_mc.x))/Math.PI + 90;

}


function fl_KeyboardDownHandler(event:KeyboardEvent):void
{
    trace("Key Code Pressed: " + event.keyCode);
    if (event.keyCode == 38)
    {
        character_mc.y = character_mc.y - 5;
    }
    if (event.keyCode == 40)
    {
        character_mc.y = character_mc.y + 5;
    }
        if (event.keyCode == 39)
    {
        character_mc.x = character_mc.x + 5;
    }
        if (event.keyCode == 37)
    {
        character_mc.x = character_mc.x - 5;
    }

}
4

1 に答える 1

1

これで回転部分が正しくなりました。必要なのは、回転部分をと軸にそれぞれ組み込むことだけcosです。例:sinxy

var speed:Number = 8;
var angle:Number = Math.atan2(mouseY - character_mc.y, mouseX - character_mc.x);

character_mc.rotation = angle * 180 / Math.PI;
character_mc.x += Math.cos( angle ) * speed;
character_mc.y += Math.sin( angle ) * speed;

混乱を避けるため90に、回転に度を追加するのをやめ、代わりにグラフィックを右/東に向けて回転させます。

ストレイフは同じロジックを使用します。ストレイフする方向に回転に4分の1の円を追加するだけです。参考までに、ラジアンの円の4分の1はPI/2です。1つの円には2つのPIラジアンがあります。

// Augment angle for strafing.
angle += Math.PI / 2;
于 2013-03-04T07:44:57.020 に答える