Показать сообщение отдельно
Старый 30.03.2011, 22:32
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию Контроллер кнопок меню

Хотелось бы узнать у людей часто работающих с МВС, и вообще знающих - как вы делаете контроллер кнопок, скажем для меню ?

Сейчас я делаю так : создаю класс кнопки, и класс контроллера. Делаю контроллер суперклассом класса работающего с меню и кнопками , и передаю туда нужные параметры. Другой вариант завести в контроллер статические переменные и уже не делать его суперклассом. Вот мне кажется, что подход мой совершенно не правильный и надо срочно менять понимание этого. Вот хотелось бы посмотреть примерчик, как бы делали вы.

По итогу контроллер рассчитывает какая кнопка нажата и идет переход в определенную часть сайта, даже если мой подход по созданию контроллера верный, то не понятно, как сделать из него именно этот переход, скажем выполнив функцию Main или какого нибудь другого класса унаследованного от спрайта например.... Вот хотелось бы во всей это каше созданной у меня в голове разобраться. Спасибо.

Код AS3:
package site.controllers 
{
	import flash.events.EventDispatcher;
 
	/**
	 * ...
	 * @author in4core
	 */
	public class MainMenuController extends EventDispatcher 
	{
 
		public function MainMenuController() 
		{
			super();
		}
 
		protected function setLocation($loc:String):void {
 
			trace($loc);
		}
	}
 
}
Код AS3:
package site.menus 
{
 
	/**
	 * ...
	 * @author in4core
	 */
	internal class MainMenuButton extends Sprite 
	{
		private var _label:String = 'custom';
 
 
		public function MainMenuButton() 
		{
			//....//
		}
 
 
		public function set nameLabel(s:String):void {
 
			_label = s;
 
		}
		public function get nameLabel():String {
 
			return _label;
		}
 
	}
 
}
Код AS3:
package site.menus 
{
	import flash.display.DisplayObjectContainer;
	import flash.display.Shape;
	import flash.display.Stage;
	import flash.events.MouseEvent;
	import flash.geom.Matrix;
	import site.controllers.MainMenuController;
	import site.utils.Configuration;
	/**
	 * ...
	 * @author in4core
	 */
	public class MainMenu extends MainMenuController
	{
		private var _container:DisplayObjectContainer;
		private const _menuNames:Vector.<String> = new < String > ['About', 'Services', 'Portfolio', 'Contacts'];
		private var _button:MainMenuButton;
 
		public function MainMenu($container:DisplayObjectContainer) 
		{
			_container = $container;
 
			drawMenuBackground();
			addButtons();
		}
 
		private function drawMenuBackground():void {
 
			_container.addChild(MainMenuBack.drawBack());
			_container.x = Math.floor ( Configuration.STAGE_WIDTH / 2 - _container.width / 2 );
			_container.y = Configuration.MENU_Y;
		}
 
		private function addButtons():void {
 
			var _w:int = _container.width/2 - Configuration.MENU_BUTTON_WIDTH * _menuNames.length/2;
 
			for ( var i:*  in _menuNames ) {
 
				_button = new MainMenuButton();
				_button.nameLabel = _menuNames[i];
				_button.x = i * (_button.width + 2) + _w; 
				_button.addEventListener(MouseEvent.CLICK , setLoc)
				_container.addChild(_button);
			}
		}
 
		private function setLoc(e:MouseEvent):void 
		{
			super.setLocation((e.currentTarget as MainMenuButton).nameLabel);
		}
	}
 
}
ВОт так ( по максимуму очистил ненужный код) приблизительно щас все это выглядет


Последний раз редактировалось in4core; 30.03.2011 в 22:56.