load之后实例化prefab,实例化之后就跟普通scene一样使用了。
...
let prefab:Laya.Prefab = Laya.loader.getRes(".../xxx");
let soldier = prefab.create() as Laya.Box; // 为了代码提示,转成实际的类型
soldier["show"].play();
在TS下面soldier如果不是any的话,直接使用soldier.show会编译报错。
可以强制转换一下 (soldier).show.play();
值得注意的地方:动画名称最好不要用show(或其他可能存在的方法与属性名字),可能与现有的函数名冲突,最好改成ani_show,以避免未知的BUG。
BTW:看到你绑定了脚本,可以在脚本里面封装这些动作。
...
ani_show:Laya.FrameAnimation;
onAwake(){
this.ani_show = this.owner["play"] as Laya.FrameAnimation;
// 在onAwake中添加播放完成事件,基于某些原因,可能在onDisable的时候被移除,如果发现异常,可以选择在onEnable里面添加事件
this.ani_show.on(Laya.Event.COMPLETE, this, this.onPlayComplete);
}
attack(callback?:Laya.Handler){
this.ani_show.play();
if (callback) // 甚至可以加上回调
this.ani_show.once(Laya.Event.COMPLETE, this, ()=>{
callback.run();
});
}
...
// 外部访问
...
let puzzleSoldier = soldier.getComponent(PuzzleSoldier) as PuzzleSoldier;
puzzleSoldier.attack();
...