forked from: MVCってこんな感じ?
青い四角をクリックすると矢印の向きが変わります。
CがボタンなのでVを含んでしまっています。要検討。
よく分からないけど、こんな感じ?
/**
* Copyright 178ep3 ( http://wonderfl.net/user/178ep3 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/v1V0
*/
// forked from Nicolas's MVCってこんな感じ?
//青い四角をクリックすると矢印の向きが変わります。
//CがボタンなのでVを含んでしまっています。要検討。
//
//よく分からないけど、こんな感じ?
package {
import flash.display.Sprite;
public class MVCTest extends Sprite {
private var _model:Model;
public function MVCTest() {
//Mを生成
_model = new Model();
//Vを生成
var view:View = addChild(new View())as View;
view.x = 200;
view.y = 100;
//MとVの架け橋的なCの生成
var controller:Controller = new Controller();
controller.model = _model;
controller.view = view;
}
}
}
//rotationの数値だけを格納するModel
import flash.display.Graphics;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.MouseEvent;
class Model extends EventDispatcher {
private var _rotation:Number = 0;
public function get rotation():Number { return _rotation; }
public function set rotation(value:Number):void {
_rotation = value;
dispatchEvent(new Event(Event.CHANGE));
}
public function Model() {}
}
//見えてる部分
import flash.display.Sprite;
class View extends Sprite {
private var btn:Sprite;
private var arrow:Shape;
public function View() {
createArrow();
createButton();
}
private function createArrow():void {
arrow = addChild(new Shape())as Shape;
var g:Graphics = arrow.graphics;
g.lineStyle(3, 0xFF0000);
g.moveTo(0, -50);
g.lineTo(0, 50);
g.lineTo( -20, 30);
g.moveTo(0, 50);
g.lineTo(20, 30);
}
private function createButton():void {
btn = addChild(new Sprite())as Sprite;
btn.x = -25;
btn.y = 200;
var g:Graphics = btn.graphics;
g.beginFill(0x000066);
g.drawRect(0, 0, 50, 50);
g.endFill();
}
public function get Btn():Sprite
{
return btn;
}
public function set Rotation(value:Number):void {
arrow.rotation = value;
}
}
import flash.display.Shape
import flash.display.Sprite
class Controller {
//モデルへの参照
private var _model:Model;
//viewの更新
private var _view:View;
public function set model(value:Model):void {
_model = value;
_model.addEventListener(Event.CHANGE, onModelUpdate);
}
public function set view(value:View):void {
_view = value;
init();
}
//これはここでやっていいのか?
private function init():void {
var btn:Sprite = _view.Btn;
btn.addEventListener(MouseEvent.CLICK,onClick);
}
//ボタンクリックでモデルを変更
private function onClick(e:MouseEvent):void {
_model.rotation += 45;
}
//viewを更新
private function onModelUpdate(e:Event):void {
_view.Rotation = _model.rotation;
}
public function Controller() {}
}