flash on 2009-9-27

by nyamogera
♥0 | Line 111 | Modified 2009-09-29 17:27:10 | MIT License
play

ActionScript3 source code

/**
 * Copyright nyamogera ( http://wonderfl.net/user/nyamogera )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/e4x8
 */

package {
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            // write as3 code here..
            
        }
    }
}

//    似非ムービークリップを作ってみたい
//    シーンは一切使ったこと無いのでとりあえず作らない
//    とりあえずは定義のみ
//    http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/display/MovieClip.html

import flash.display.Sprite
import flash.events.Event;
import flash.display.DisplayObject;

internal class ShamMovieClip extends Sprite{
    
    private var _currentFrame:int;    //    MovieClip インスタンスのタイムライン内の再生ヘッドが置かれているフレームの番号を示します。
    private var _currentLabel:String; //    MovieClip インスタンスのタイムライン内の再生ヘッドが置かれている現在のラベルです。
    
    private var _currentScene:int;    //    MovieClip インスタンスのタイムライン内の再生ヘッドが置かれている現在のシーンです。    
    private var _totalFrames:int;     //    MovieClip インスタンス内のフレーム総数です。
    private var _labels:Array;
    
    private var _functions:Array;    //    関数たち
    private var _childs:Array;
    private var _isPlay:Boolean;
    
    //    似非ムービークリップを作成します
    //    totalFrame フレーム数
    public function ShamMovieClip(totalFrame:int = 0 ) 
    {
        _labels = new Array();
        _childs = new Array();
        
    }
    
    //    エンターフレーム
    private function enterFrame(event:Event) : void
    {
        if( !_isPlay ) return ;
        
        if( _totalFrames >= _currentFrame ) 
        {
            _currentFrame = 0;
        }
        
        if( _functions[_currentFrame] != null )
        {
            _functions[_currentFrame]();
        }
        
        _currentFrame++;
    }
    
    //    指定されたフレームで SWF ファイルの再生を開始します。
    public  function gotoAndPlay(frame:Object) : void
    {
        var search:int = searchFrame(frame);
        
        if( search != -1 )
        {
             _currentFrame = search;
             _isPlay = true;
             return ;
        }
        
        throw new Error("指定されたフレームはないです。" + frame.toString()); 
    }
    
    //    フレーム検索
    private function searchFrame(frame:Object) : int
    {
        if( frame is String )
        {
            //    ラベルだったとき
            var label:int = _labels.indexOf(frame);
            
            if( label != -1 )
            {
                return label;
            }
        }
        else if( frame < _totalFrames ) 
        {
            return int(frame);
        }
        
        return -1;
    }
     
    //    このムービークリップの指定されたフレームに再生ヘッドを送り、そこで停止させます。
    public  function gotoAndStop(frame:Object) : void
    {
    }
    
    //    ムービークリップのタイムライン内で再生ヘッドを移動します。
    public function play() : void
    {
        _isPlay = true;
    }
    
    //    ムービークリップ内の再生ヘッドを停止します。
    public function stop() : void
    {
        _isPlay = false;
    }
    
    //    フレーム取得
    public function get currentFrame() : int
    {
        return _currentFrame;
    }
    
    //    現在のラベルを返す
    public function get currentLabel() : String
    {
        if( _labels == null ) return null;
        
        if( _labels.length <= _currentFrame )
        {
            return null;
        }
        
        return _labels[_currentFrame];
    }
    
    //    このシーンのラベルを返す
    public function get currentLabels() : Array
    {
        return _labels;
    }
    
    //    ラベル追加
    //    frame 追加したいフレーム番号
    //    label ラベル名
    public function addLabel(frame:int, label:String) : void
    {
        _labels[frame] = label;
    }
    
    //    フレームスクリプトを追加する
    //    frame 追加したいフレーム番号・ラベル
    //    func 関数
    public function addFrameScript(frame:Object, func:Function) : void
    {
        var search:int = searchFrame(frame);
        
        if( search != -1 )
        {
             _functions[search] = func;
             return ;
        }
        
        throw new Error("指定されたフレームはないです。" + frame.toString());   
    }
    
    //    子をある一定の位置のフレームに追加する
    //    child 子
    //    frame 追加したいフレーム番号・ラベル
    //    length フレーム数
    public function addChildToFrames(child:DisplayObject,frame:Object,length:int) : DisplayObject
    {
        return child;
    }
}