Ввод с клавиатуры из отдельных классов для движения

Мне было интересно, как вы получаете ввод с клавиатуры из отдельного класса в as3. У меня есть класс, который будет использовать клавиши со стрелками для перемещения, но он должен быть в hero класс, как я могу вызвать функцию движения из основной функции?

1 ответ

Обычно вы будете прослушивать события клавиатуры со сцены, поэтому лучший способ справиться с этим, вероятно, состоит в том, чтобы просто добавить специальную логику клавиатуры, которая вам нужна, в ваш класс Hero.

Вы можете прослушивать события ADDED_TO_STAGE и REMOVED_FROM_STAGE в вашем Герое, чтобы инициировать, когда добавлять и удалять прослушиватели событий клавиатуры.

Базовый пример может работать так:

public class Hero extends Sprite
{

    // Constructor
    public function Hero()
    {
        addEventListener( Event.ADDED_TO_STAGE, onAddedToStage );
    }


    // Event handlers

    protected function onAddedToStage( event:Event ):void
    {
        this.removeEventListener( Event.ADDED_TO_STAGE, onAddedToStage );
        this.addEventListener( Event.REMOVED_FROM_STAGE, onRemovedFromStage );
        this.stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyDown );
        this.stage.addEventListener( KeyboardEvent.KEY_UP, onKeyUp );
    }

    protected function onRemovedToStage( event:Event ):void
    {
        this.addEventListener( Event.ADDED_TO_STAGE, onAddedToStage );
        this.removeEventListener( Event.REMOVED_FROM_STAGE, onRemovedFromStage );
        this.stage.removeEventListener( KeyboardEvent.KEY_DOWN, onKeyDown );
        this.stage.removeEventListener( KeyboardEvent.KEY_UP, onKeyUp );
    }

    protected function onKeyDown( event:KeyboardEvent ):void
    {
        switch (event.keyCode)
        {
            case Keyboard.LEFT:
                // Start movement
                break;
            case Keyboard.RIGHT:
                // Start movement
                break;
        }
    }

    protected function onKeyUp( event:KeyboardEvent ):void
    {
        switch (event.keyCode)
        {
            case Keyboard.LEFT:
                // Stop movement
                break;
            case Keyboard.RIGHT:
                // Stop movement
                break;
        }  
    }
}
Другие вопросы по тегам