Ввод с клавиатуры из отдельных классов для движения
Мне было интересно, как вы получаете ввод с клавиатуры из отдельного класса в 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;
}
}
}