Итак, я создал класс кнопки с помощью шаблона 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));
}
}
}
Буду рад любым конструктивным замечаниям.
