0

複数のキーストロークに対してイベント リスナーを追加するにはどうすればよいでしょうか。たとえば、上ボタンと右ボタンを押すと、プレイヤーはその方向に斜めに移動します。

4

1 に答える 1

3

次のコードを確認してください。押されたキーをオブジェクトに保存し、オブジェクトを使用してスプライトをアニメーション化します。

package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;

    public class Main extends Sprite 
    {
        private var _keys:Object = { };
        private var _sprite:Sprite = new Sprite;

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point

            _sprite.graphics.beginFill(0xff0000, 1);
            _sprite.graphics.drawRect(0, 0, 40, 40);
            _sprite.graphics.endFill();
            _sprite.x = 100;
            _sprite.y = 100;
            addChild(_sprite);

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

        private function onKeyDown(e:KeyboardEvent):void 
        {
            _keys[e.keyCode] = true;
        }

        private function onKeyUp(e:KeyboardEvent):void 
        {
            _keys[e.keyCode] = false;   
        }

        private function onEnterFrame(e:Event):void 
        {

            if (_keys[Keyboard.UP])
            {
                _sprite.y --;
            }

            if (_keys[Keyboard.DOWN])
            {
                _sprite.y ++;
            }

            if (_keys[Keyboard.RIGHT])
            {
                _sprite.x++;
            }

            if (_keys[Keyboard.LEFT])
            {
                _sprite.x--;
            }
        }

    }

}
于 2013-04-14T03:19:47.470 に答える