Код AS3:
package
{
public class KeyBoardController
{
private var _keyboardFlags: Object = {};
public function get keyboardFlags( ): Object
{
return this._keyboardFlags;
}
private var _hero: Hero;
public function setHero( hero: Hero ): void
{
this._hero = hero;
}
public function KeyBoardController( ){
}
public function update( ):void
{
this.keyboardValidate( );
if( _keyboardFlags.LEFT == true ){
_hero.leftState( );
}else if( _keyboardFlags.RIGHT == true ){
_hero.rightState( );
}else if( _keyboardFlags.STOP == true ){
_hero.stopState( );
}
}
private function keyboardValidate( ): void
{
if( _keyboardFlags.LEFT == true && _keyboardFlags.RIGHT == true ){
_keyboardFlags.STOP = true;
}
}
public function reset( ): void
{
for( var flag in this._keyboardFlags ){
if( this._keyboardFlags[flag] == true ){
this._keyboardFlags[flag] = false;
}
}
}
}
}
Код AS3:
package
{
public class Hero
{
private var _view:DisplayObject;
public function Hero( view:DisplayObject ){
this._view = view;
}
public function leftState( ): void
{
//
}
public function rightState( ): void
{
//
}
public function stopState( ): void
{
//
}
}
}
Код AS3:
// и где-то в коде
var _hero: Hero = new Hero( mc );
var _keyBoardController: KeyBoardController = new KeyBoardController( _hero );
var _keyboardFlags = _keyBoardController.keyboardFlags;
stage.addEventListener( KeyboardEvent.DOWN, stage_keyboardEventDown );
stage.addEventListener( Event.ENTER_FRAME, stage_enterFrame );
private function stage_keyboardEventDown( event: KeyboardEvent ): void
{
if( event.keyCode == Keyboard.LEFT ){
_keyboardFlags.LEFT = true;
}
if( event.keyCode == Keyboard.RIGHT ){
_keyboardFlags.RIGHT = true;
}
}
private function stage_enterFrame( event: Event ): void
{
_keyBoardController.update( );
_keyBoardController.reset( );
}
Добавлено через 1 минуту
Если что-то не понимаете, то спрашивайте, а то неохото все расписывать.
Добавлено через 27 минут
Или вот так -
Код AS3:
package
{
public class KeyBoardController
{
private var _keyboardFlags: Object = {};
public function get keyboardFlags( ): Object
{
return this._keyboardFlags;
}
private var _hero: Hero;
public function setHero( hero: Hero ): void
{
this._hero = hero;
}
public function KeyBoardController( ){
}
public function update( ):void
{
this.keyboardValidate( );
if( _keyboardFlags.LEFT == true ){
_hero.setState = Hero.LEFT;
}else if( _keyboardFlags.RIGHT == true ){
_hero.setState = Hero.RIGHT;
}else if( _keyboardFlags.STOP == true ){
_hero.setState = Hero.STOP;
}
return this;
}
private function keyboardValidate( ): void
{
if( _keyboardFlags.LEFT == true && _keyboardFlags.RIGHT == true ){
_keyboardFlags.STOP = true;
}
}
public function reset( ): void
{
for( var flag in this._keyboardFlags ){
if( this._keyboardFlags[flag] == true ){
this._keyboardFlags[flag] = false;
}
}
return this;
}
}
}
package
{
public class Hero
{
public static const LEFT: String = 'left';
public static const RIGHT: String = 'right';
public static const STOP: String = 'stop';
private var _currentState: String;
public function set currentState( value ): void
{
if( this._currentState == value ){
return;
}
this._currentState = value;
}
private var _view:DisplayObject;
public function Hero( view:DisplayObject ){
this._view = view;
}
private function leftState( ): void
{
//
}
private function rightState( ): void
{
//
}
private function stopState( ): void
{
//
}
public function execute( ): void
{
if( _currentState == Hero.LEFT ){
this.leftState( );
}else if( _currentState == Hero.RIGHT ){
this.rightState( );
}else if( _currentState == Hero.STOP ){
this.stopState( );
}
}
}
}
// и где-то в коде
var _hero: Hero = new Hero( mc );
var _keyBoardController: KeyBoardController = new KeyBoardController( ).setHero( _hero )
var _keyboardFlags = _keyBoardController.keyboardFlags;
stage.addEventListener( KeyboardEvent.DOWN, stage_keyboardEventDown );
stage.addEventListener( Event.ENTER_FRAME, stage_enterFrame );
private function stage_keyboardEventDown( event: KeyboardEvent ): void
{
if( event.keyCode == Keyboard.LEFT ){
_keyboardFlags.LEFT = true;
}
if( event.keyCode == Keyboard.RIGHT ){
_keyboardFlags.RIGHT = true;
}
}
private function stage_enterFrame( event: Event ): void
{
_keyBoardController.update( ).reset( );
_hero.execute( );
}