0

私は2つのeventListenersを持っています:

1)キーリスナー(A、S、D、W); -オブジェクトの移動用

2)キーリスナー(WhiteSpace)-ジャンプオブジェクト用

したがって、A OR S OR D OR Wキーを押した後、空白を押すと、この瞬間の前にすべてが大丈夫になります。オブジェクトは移動とジャンプを同時に行いますが、移動中に空白キーを離すと、オブジェクトは停止します...

では、キーの空白を離してもオブジェクトが移動するようにするにはどうすればよいですか?他のキーを離したり押したりすることに注意を払っていませんか?

private function onKeyDown(e:KeyboardEvent):void {

    //trace(e.keyCode);
    switch(e.keyCode)
    {

    case 68:
    direction = 'left';
    stage.addEventListener(Event.ENTER_FRAME, moveRight);
    break;
    case 65:
    direction = 'right';
    stage.addEventListener(Event.ENTER_FRAME, moveLeft);
    break;
    case 32:
    jump() // the whitespace key
        break;

    }

private function moveRight(e:Event):void {

shape.x += 5;

}

private function moveLeft(e:Event):void {

shape.x += 5;

}

private function jump():void {

    stage.addEventListener(Event.ENTER_FRAME, jumpAnimation);
}

private function jumpAnimation(e:Event):void {

   //here code for jumping increasing the y and decreasing....
}

private function onKeyUp(e:Event):void {


    stage.removeEventListener(Event.ENTER_FRAME, moveRight);
    stage.removeEventListener(Event.ENTER_FRAME, moveLeft);


}
4

1 に答える 1

1

キーアップ/ダウンリスナーとEnterフレームリスナーを実装し、いくつかのブール値を使用して、どのキーがダウンしているかを示し、それに応じて更新することができます。このようなものが機能する可能性があります:

var keyMap:Dictionary = new Dictionary();

addEventListener( KeyboardEvent.KEY_DOWN, onKeyDown );
addEventListener( KeyboardEvent.KEY_UP, onKeyUp );
addEventListener( Event.ENTER_FRAME, onEnterFrame );

function onKeyDown( event:KeyboardEvent ):void 
{
    keyMap[ event.keyCode ] = true;
}

function onKeyUp( event:KeyboardEvent ):void 
{
    keyMap[ event.keyCode ] = false;
}

function onEnterFrame( event:EnterFrame ):void 
{
    if( keyMap[ 68 ] ) 
    {
        // -- move left
    }

    if( keyMap[ 65 ] ) 
    {
        // -- move right 
    }

    // -- ect...
}

これにより、各キーから1つのキーを上または下にのみ依存するため、1つのキーを上にすると他のすべてのキーが継続的に起動する状況を回避できます。シーンを更新するコードは継続的に実行されます。

于 2012-07-06T16:14:37.660 に答える