の続きで、
シンボルにクラスを紐付けることはできたのですが、
生成したオブジェクトに引数も渡したいなって思って、
ここもちと考えてました
データ引き渡し用のクラスを用意
データ引き渡し用のクラスを別途用意したいと思います
上記の記事の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};
みたいに、オブジェクトを渡せばいいのかなと思います