Показать сообщение отдельно
Старый 23.10.2014, 23:15
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 4  
Ответить с цитированием
Gerbert
Banned

Регистрация: Aug 2014
Сообщений: 461
Код 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( );
}