0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AnimateCC シンボルにプログラムをリンケージ+データ渡し

Last updated at Posted at 2023-01-14

の続きで、
シンボルにクラスを紐付けることはできたのですが、
生成したオブジェクトに引数も渡したいなって思って、
ここもちと考えてました

データ引き渡し用のクラスを用意

データ引き渡し用のクラスを別途用意したいと思います
上記の記事のAbstractDispクラスを少し変更します

class AbstractDisp{
	protected _myDisp:createjs.MovieClip = null;
	protected _lib:any = null;

	constructor(current:createjs.MovieClip, lib:any){
		this._myDisp = current;
		this._lib = lib;
		this._myDisp.stop();
		this._init();
	}

	protected _init():void{
	}
}

これを継承して、AbstractItemクラスを用意

class AbstractItem extends AbstractDisp{
	constructor(current:createjs.MovieClip, lib:any){
		super(current, lib);

		if(this._myDisp.data !== undefined){
			this._setData(this._myDisp.data);
		}
	}

	protected _setData(data:any):void{
		throw new Error("AbstractItem._setData() Abstract Method!");
	}
}

このクラスは、シンボル生成時に data プロパティが存在していたら _setData() メソッドを呼び出します

Itemクラスに AbstractItem を継承

続いて、動的生成する Itemクラス

class Item extends AbstractItem{
	constructor(current:createjs.MovieClip, lib:any){
		super(current, lib);
	}

	protected _init():void{
		this._myDisp.alpha = 0;
		this._myDisp.scale = 0;
	}

	protected _setData(data:any):void{
		createjs.Tween.get(this._myDisp).wait(100 * data).to({scale:1, alpha:1}, 1000, createjs.Ease.circOut);
	}
}

もらう data には、生成した順番を渡してもらいます
この順番に100ミリセックを掛けて、生成順に徐々に出現するようにしてあります

最後に Mainクラス

class Main extends AbstractDisp{
	constructor(current:createjs.MovieClip, lib:any){
		super(current, lib);

		this._displayItem();
	}

	private _displayItem():void{
		const XNUMS:number = 5; // 横の数
		const YNUMS:number = 3; // 縦の数
		const GRID:number = 100; // グリッド
		const LEFT:number = 100; // 左
		const TOP:number = 100; // 上

		let cnt:number = 0;
		let i:number, i2:number;
		for(i = 0; i < YNUMS; i++){
			for(i2 = 0; i2 < XNUMS; i2++){
				let item:Item = new this._lib.Item();
				item.data = cnt++; // ここで生成した順番を data にセットする
				item.x = LEFT + GRID * i2;
				item.y = TOP + GRID * i;
				this._myDisp.addChild(item);
			}
		}
	}
}

実行すると、横に5つ、縦に3つ、計15個の Itemオブジェクトが徐々に表示されます

まとめ

これでデータの受け渡しもできるようになりました
ただしこれだと data プロパティが1つだけなので、もし複数のデータを渡したいときは、
data = {a:hoge, b:hoge2};
みたいに、オブジェクトを渡せばいいのかなと思います

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?