In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

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() {}
}