API Docs for: 最后更新日期:2014年8月25日
Google搜索   
Show:

File: display/LAnimationTimeline.js

/** @language japanese
 * 新しい LAnimation インスタンスを作成します。
 * LAnimationTimeline クラスはLAnimation クラスの上にいくつの便利な機能をサポートしています。LAnimation クラスでアニメーションを再生する時、自身のonframe函数を呼び出し無ければなりません、LAnimationTimelineクラスは自動的にアニメーションを再生することができます。
 * @class LAnimationTimeline
 * @extends LAnimation
 * @constructor
 * @param {LBitmapData} data LBitmapData オブジェクト(スプライトシート),アニメーションのひとコマひとコマをひとつにまとめた画像ファイルです。
 * @param {Array} list <p>frameごとの属性。</p>
 * <p>フォーマットは{x : 0, y : 0, width : 100, height : 100, sx : 0, sy : 0}の通りです。 x, y, width, heightはLBitmapData オブジェクトの各属性の値です,sx, syはひとコマのアニメーションを表示する時の座標です。</p>
 * <p>もしスプライトシートのframeの大きさが全部同じであれば、LGlobal.divideCoordinate関数を使って画像を分割することができます。</p>
 * @example
 * 	LInit(50, "legend", 800, 480, main);
 * 	function main () {
 * 		var loader = new LLoader();
 * 		loader.addEventListener(LEvent.COMPLETE, loadBitmapdata); 
 * 		loader.load("player.png", "bitmapData");
 * 	}
 * 	function loadBitmapdata(event){
 * 		var backLayer = new LSprite();
 * 		addChild(backLayer);
 * 		var list = LGlobal.divideCoordinate(480,630,3,4);
 * 		var data = new LBitmapData(event.currentTarget,0,0,120,210);
 * 		player = new LAnimationTimeline(data,list);
 * 		backLayer.addChild(player);
 * 	}
 * @examplelink <p><a href="../../../api/LAnimationTimeline/index.html" target="_blank">実際のサンプルを見る</a></p>
 * @since 1.8.0
 * @public
 */
var LAnimationTimeline = (function () {
	function LAnimationTimeline (data, list) {
		var s = this;
		LExtends(s, LAnimation, [null, data, list]);
		/** @language japanese
		 * オブジェクトのタイプ
		 * @property type
		 * @type String
		 * @default LAnimationTimeline
		 * @since 1.8.0
		 * @public
		 */
		s.type = "LAnimationTimeline";
		/** @language japanese
		 * アニメーションのスピード。
		 * @property speed
		 * @type int
		 * @default 0
		 * @since 1.8.0
		 * @example
		 * 	function loadBitmapdata(event){
		 * 		var backLayer = new LSprite();
		 * 		addChild(backLayer);
		 * 		var list = LGlobal.divideCoordinate(480,630,3,4);
		 * 		var data = new LBitmapData(event.currentTarget,0,0,120,210);
		 * 		var player = new LAnimationTimeline(data,list);
		 * 		player.speed = 10;
		 * 		backLayer.addChild(player);
		 * 		var player2 = new LAnimationTimeline(data.clone(),list);
		 * 		player2.speed = 5;
		 * 		player2.x = 150;
		 * 		backLayer.addChild(player2);
		 * 	}
		 * @examplelink <p><a href="../../../api/LAnimationTimeline/speed.html" target="_blank">実際のサンプルを見る</a></p>
		 * @public
		 */
		s.speed = 0;
		s._speedIndex = 0;
		s.ll_labelList = {};
		s.addEventListener(LEvent.ENTER_FRAME, s._ll_onframe);
	};
	var p = {
		/** @language japanese
		 * 新しい LAnimationTimeline オブジェクトとして、元のインスタンスのクローンを返します。オブジェクトはまったく同じコピーになります。
		 * @method clone
		 * @return {LAnimationTimeline} 元のオブジェクトと同一の新しい LAnimationTimeline オブジェクトです。
		 * @since 1.8.8
		 * @public
		 * @example
		 * 	LInit(200,"legend",800,450,main);
		 * 	var player;
		 * 	var player2;
		 * 	function main(){
		 * 		var loader = new LLoader();
		 * 		loader.addEventListener(LEvent.COMPLETE, loadBitmapdata);
		 * 		loader.load("player.png", "bitmapData");
		 * 	}
		 * 	function loadBitmapdata(event){
		 * 		var backLayer = new LSprite();
		 * 		addChild(backLayer);
		 * 		var list = LGlobal.divideCoordinate(480,630,3,4);
		 * 		var data = new LBitmapData(event.currentTarget,0,0,120,210);
		 * 		player = new LAnimation(backLayer,data,list);
		 * 		player2 = player.clone();
		 * 		player2.setAction(2,0);
		 * 		player2.x = 150;
		 * 		backLayer.addChild(player2);
		 * 		backLayer.addEventListener(LEvent.ENTER_FRAME,onframe);
		 * 	}
		 * 	function onframe(event){
		 * 		player.onframe();
		 * 		player2.onframe();
		 * 	}
		 * @examplelink <p><a href="../../../api/LAnimationTimeline/clone.html" target="_blank">実際のサンプルを見る</a></p>
		 */
		clone : function () {
			var s = this, k, o, a = new LAnimation(null, s.bitmap.bitmapData, s.imageArray.slice(0));
			a.copyProperty(s);
			a.childList.length = 0;
			a.bitmap = s.bitmap.clone();
			a.addChild(a.bitmap);
			for (k in s.ll_labelList) {
				o = s.ll_labelList[k];
				a.ll_labelList[k] = {rowIndex : o.rowIndex, colIndex : o.colIndex, mode : o.mode, isMirror : o.isMirror};
			}
			return a;
		},
		setFrameSpeedAt : function (rowIndex, colIndex, speed) {
			var s = this;
			if (!s._ll_stepArray[rowIndex]) {
				s._ll_stepArray[rowIndex] = [];
			}
			s._ll_stepArray[rowIndex][colIndex] = speed;
		},
		_ll_onframe : function (event) {
			var self = event.target;
			if (self._ll_stop) {
				return;
			}
			if (self._speedIndex++ < self.speed) {
				return;
			}
			self._speedIndex = 0;
			self.onframe();
		},
		/** @language japanese
		 * LAnimationTimeline インスタンスのタイムライン内にラベルを追加します。
		 * @method setLabel
		 * @since 1.8.0
		 * @public
		 * @example
		 * 	LInit(200,"legend",800,450,main);
		 * 	function loadBitmapdata(event){
		 * 		var backLayer = new LSprite();
		 * 		addChild(backLayer);
		 * 		var list = LGlobal.divideCoordinate(480,630,3,4);
		 * 		var data = new LBitmapData(event.currentTarget,0,0,120,210);
		 * 		var player = new LAnimationTimeline(backLayer,data,list);
		 * 		player.setLabel("right",2,0,1,true);
		 * 		backLayer.addChild(player);
		 * 		player.gotoAndPlay("right");
		 * 	}
		 * @examplelink <p><a href="../../../api/LAnimationTimeline/setLabel.html" target="_blank">実際のサンプルを見る</a></p>
		 */
		setLabel : function (name, _rowIndex, _colIndex, _mode, _isMirror) {
			this.ll_labelList[name] = {rowIndex : _rowIndex, colIndex : _colIndex, mode : _mode, isMirror : _isMirror};
		},
		/** @language japanese
		 * LAnimationTimeline オブジェクトの再生を開始します。
		 * @method play
		 * @since 1.8.0
		 * @public
		 * @example
		 * 	LInit(200,"legend",800,450,main);
		 * 	function loadBitmapdata(event){
		 * 		var backLayer = new LSprite();
		 * 		addChild(backLayer);
		 * 		var list = LGlobal.divideCoordinate(480,630,3,4);
		 * 		var data = new LBitmapData(event.currentTarget,0,0,120,210);
		 * 		var player = new LAnimationTimeline(backLayer,data,list);
		 * 		player.setLabel("right",2,0,1,true);
		 * 		backLayer.addChild(player);
		 * 		player.gotoAndPlay("right");
		 * 	}
		 * @examplelink <p><a href="../../../api/LAnimationTimeline/play_stop.html" target="_blank">実際のサンプルを見る</a></p>
		 */
		play : function () {
			this._ll_stop = false;
		},
		/** @language japanese
		 * LAnimationTimeline オブジェクトの再生を停止します。
		 * @method stop
		 * @since 1.8.0
		 * @public
		 * @example
		 * 	LInit(200,"legend",800,450,main);
		 * 	function loadBitmapdata(event){
		 * 		var backLayer = new LSprite();
		 * 		addChild(backLayer);
		 * 		var list = LGlobal.divideCoordinate(480,630,3,4);
		 * 		var data = new LBitmapData(event.currentTarget,0,0,120,210);
		 * 		var player = new LAnimationTimeline(backLayer,data,list);
		 * 		player.setLabel("right",2,0,1,true);
		 * 		backLayer.addChild(player);
		 * 		player.gotoAndPlay("right");
		 * 	}
		 * @examplelink <p><a href="../../../api/LAnimationTimeline/play_stop.html" target="_blank">実際のサンプルを見る</a></p>
		 */
		stop : function () {
			this._ll_stop = true;
		},
		/** @language japanese
		 * 指定されたフレームで LAnimationTimeline オブジェクトの再生を開始します。
		 * @method gotoAndPlay
		 * @param {String} label 再生ヘッドの送り先となるフレームのラベルを表すストリングです。
		 * @since 1.8.0
		 * @public
		 * @example
		 * 	LInit(200,"legend",800,450,main);
		 * 	function loadBitmapdata(event){
		 * 		var backLayer = new LSprite();
		 * 		addChild(backLayer);
		 * 		var list = LGlobal.divideCoordinate(480,630,3,4);
		 * 		var data = new LBitmapData(event.currentTarget,0,0,120,210);
		 * 		var player = new LAnimationTimeline(backLayer,data,list);
		 * 		player.setLabel("right",2,0,1,true);
		 * 		backLayer.addChild(player);
		 * 		player.gotoAndPlay("right");
		 * 	}
		 * @examplelink <p><a href="../../../api/LAnimationTimeline/gotoAndPlay.html" target="_blank">実際のサンプルを見る</a></p>
		 */
		gotoAndPlay : function (name) {
			var s = this, l = s.ll_labelList[name];
			s.setAction(l.rowIndex, l.colIndex, l.mode, l.isMirror);
			s.play();
		},
		/** @language japanese
		 * このムービークリップの指定されたフレームに再生ヘッドを送り、そこで停止させます。
		 * @method gotoAndStop
		 * @param {String} label 再生ヘッドの送り先となるフレームのラベルを表すストリングです。
		 * @since 1.8.0
		 * @public
		 * @example
		 * 	LInit(200,"legend",800,450,main);
		 * 	function loadBitmapdata(event){
		 * 		var backLayer = new LSprite();
		 * 		addChild(backLayer);
		 * 		var list = LGlobal.divideCoordinate(480,630,3,4);
		 * 		var data = new LBitmapData(event.currentTarget,0,0,120,210);
		 * 		var player = new LAnimationTimeline(backLayer,data,list);
		 * 		player.setLabel("right",2,0,1,true);
		 * 		backLayer.addChild(player);
		 * 		player.gotoAndStop("right");
		 * 	}
		 * @examplelink <p><a href="../../../api/LAnimationTimeline/gotoAndStop.html" target="_blank">実際のサンプルを見る</a></p>
		 */
		gotoAndStop : function (name) {
			var s = this, l = s.ll_labelList[name];
			s.setAction(l.rowIndex, l.colIndex, l.mode, l.isMirror);
			s.onframe();
			s.stop();
		},
		/** @language japanese
		 * 指定されたフレームにスクリプトを追加する。
		 * @method addFrameScript
		 * @param {String} label 指定されたフレーム。
		 * @param {Function} func 関数。
		 * @param {Array} params 関数を実行する時のパラメータ。
		 * @since 1.8.0
		 * @public
		 * @example
		 * 	LInit(200,"legend",800,450,main);
		 * 	function loadBitmapdata(event){
		 * 		var backLayer = new LSprite();
		 * 		addChild(backLayer);
		 * 		var list = LGlobal.divideCoordinate(480,630,3,4);
		 * 		var data = new LBitmapData(event.currentTarget,0,0,120,210);
		 * 		var player = new LAnimationTimeline(backLayer,data,list);
		 * 		player.setLabel("right",2,0,1,true);
		 * 		player.addFrameScript("right",scriptTest,["testParams1","testParams2"]);
		 * 		backLayer.addChild(player);
		 * 		player.gotoAndPlay("right");
		 * 	}
		 * 	function scriptTest(param1,param2){
		 * 		trace("scriptTest Run : " + param1 + "," + param2);
		 * 	}
		 * @examplelink <p><a href="../../../api/LAnimationTimeline/addFrameScript.html" target="_blank">実際のサンプルを見る</a></p>
		 */
		addFrameScript : function (name, func, params) {
			var l = this.ll_labelList[name];
			var arr = this.imageArray[l.rowIndex][l.colIndex];
			arr.script = func;
			arr.params = params ? params : null;
		},
		/** @language japanese
		 * 指定されたフレームにあるスクリプトを削除する。
		 * @method removeFrameScript
		 * @param {String} label 指定されたフレーム。
		 * @since 1.8.0
		 * @public
		 * @example
		 * 	LInit(200,"legend",800,450,main);
		 * 	function loadBitmapdata(event){
		 * 		var backLayer = new LSprite();
		 * 		addChild(backLayer);
		 * 		var list = LGlobal.divideCoordinate(480,630,3,4);
		 * 		var data = new LBitmapData(event.currentTarget,0,0,120,210);
		 * 		var player = new LAnimationTimeline(backLayer,data,list);
		 * 		player.setLabel("right",2,0,1,true);
		 * 		player.addFrameScript("right",scriptTest,["testParams1","testParams2"]);
		 * 		backLayer.addChild(player);
		 * 		player.gotoAndPlay("right");
		 * 	}
		 * 	function scriptTest(param1,param2){
		 * 		trace("scriptTest Run : " + param1 + "," + param2);
		 * 	}
		 * @examplelink <p><a href="../../../api/LAnimationTimeline/removeFrameScript.html" target="_blank">実際のサンプルを見る</a></p>
		 */
		removeFrameScript : function (name) {
			var l = this.ll_labelList[name];
			this.imageArray[l.rowIndex][l.colIndex].script = null;
		}
	};
	for (var k in p) {
		LAnimationTimeline.prototype[k] = p[k];
	}
	return LAnimationTimeline;
})();