Тема: Кнопка MVC
Показать сообщение отдельно
Старый 04.06.2014, 23:08
2misha вне форума Посмотреть профиль Отправить личное сообщение для 2misha Найти все сообщения от 2misha
  № 1  
Ответить с цитированием
2misha

Регистрация: Apr 2014
Сообщений: 97
По умолчанию Кнопка MVC

Итак, я создал класс кнопки с помощью шаблона MVC. Когда наводишь на неё курсор - цвет меняется, когда убираешь - становится прежним. Все работает нормально, просто хочу попросить вам проверить грамотность написания кода и сказать правильно ли я понял принцип работы MVC и правильно ли реализовал в этот примере.


Класс, что собирает вьюшки (хоть она пока одна):
Код AS3:
package net.freedomstate.elements
{
	/**
	 * ...
	 * @author Scorpion
	 */
 
	import flash.display.*;
	import net.freedomstate.elements.but.*;
 
	public class But extends Sprite
	{
		private var _button: View;
 
		public function But(valueX: int, valueY: int, valueText: String = "")
		{
			_button = new View(valueX, valueY, valueText);
			addChild(_button);
		}
	}
}
Классы MVC:
Код AS3:
package net.freedomstate.elements.but
{
	/**
	 * ...
	 * @author Scorpion
	 */
 
	import flash.display.*; 
	import flash.events.*;
	import flash.geom.ColorTransform;
	import net.freedomstate.elements.TextF;
 
	public class View extends Sprite
	{
		[Embed(source = "../../../../../img/button.png")] private static const Embed: Class;
 
		private var _text: TextF;
		private var _bitmap: Bitmap;
		private var _model: Model;
		private var _controller: Controller;
		private var _originalColorTransform: ColorTransform;
		private var _over: Boolean;
 
		public function View(valueX: int, valueY: int, valueText: String = "")
		{
			_model = new Model();
			_controller = new Controller(_model);
 
			_model.addEventListener(Event.ENTER_FRAME, setColor);
			_model.addEventListener(Event.EXIT_FRAME, setOriginalColor);
 
			_originalColorTransform = transform.colorTransform;
 
			_text = new TextF(0, 0, valueText, "DYNAMIC", "Times New Roman");
			_text.autoSize = "center";
			_text.mouseEnabled = false;
 
			_bitmap = new Embed as Bitmap;
			_bitmap.width = _text.width + 20;
 
			_text.y = 10;
			_text.x = ( _bitmap.width - _text.width ) / 2;
 
			x = valueX;
			y = valueY;
 
			buttonMode = true;
 
			addChild(_bitmap);
			addChild(_text);
 
			this.addEventListener(MouseEvent.ROLL_OVER, rollOver);
		}
 
		private function rollOver(e: Event): void
		{
			_over = true;
 
			_controller.dispatchEvent(new DataEvent(Event.ENTER_FRAME, false, false, String(_over)));
		}
 
		private function setColor(e: DataEvent): void
		{
			var newColor: ColorTransform = new ColorTransform(0.95, 0.95, 1.1);
			this.transform.colorTransform = newColor;
 
			this.removeEventListener(MouseEvent.ROLL_OVER, setColor);
			this.addEventListener(MouseEvent.ROLL_OUT, rollOut);
		}
 
		private function rollOut(e: Event): void
		{
			_over = false;
 
			_controller.dispatchEvent(new DataEvent(Event.EXIT_FRAME, false, false, String(_over)));
		}
 
		private function setOriginalColor(e: DataEvent): void
		{
			transform.colorTransform = _originalColorTransform; 
		}
	}
}
Код AS3:
package net.freedomstate.elements.but
{
	/**
	 * ...
	 * @author Scorpion
	 */
 
	import flash.events.*; 
 
	public class Controller extends EventDispatcher
	{
		private var _model: Model;
 
		public function Controller(rModel: Model): void
		{
			_model = rModel;
 
			this.addEventListener(Event.ENTER_FRAME, setColor);
			this.addEventListener(Event.EXIT_FRAME, setOriginalColor);
		}
 
		private function setColor(e: DataEvent): void
		{
			_model.dispatchEvent(new DataEvent(Event.ENTER_FRAME, false, false, e.data));
		}
 
		private function setOriginalColor(e: DataEvent): void
		{
			_model.dispatchEvent(new DataEvent(Event.EXIT_FRAME, false, false, e.data));
		}
	}
}
Код AS3:
package net.freedomstate.elements.but
{
	/**
	 * ...
	 * @author Scorpion
	 */
 
	import flash.events.*; 
 
	public class Model extends EventDispatcher
	{
		public function Model(): void
		{
			this.addEventListener(Event.ENTER_FRAME, setColor);
			this.addEventListener(Event.EXIT_FRAME, setOriginalColor);
		}
 
		private function setColor(e: DataEvent): void
		{
			if (e.data == "true")
			dispatchEvent(new DataEvent(Event.ENTER_FRAME)); 
		}
 
		private function setOriginalColor(e: DataEvent): void
		{
			if (e.data == "false")
			dispatchEvent(new DataEvent(Event.EXIT_FRAME));
		}
	}
}
Буду рад любым конструктивным замечаниям.