[LayaAir 2.0]如何通过代码控制prefab上面的时间轴动画animation?

在prefab上面做了一个时间轴动画,load之后如果能够获取到这个animation通过代码来控制
QQ图片20190215092747.png
已邀请:

185*****013

赞同来自: 卡布

var arr:Array = target["_aniList"];
for each(var an:FrameAnimation in arr)
{
if(an.name=="show")
{
an.play();
}
}

小声飞

赞同来自:

直接用这个scene 的实例  .show.play(0) 就行了
比如 var ss:soldieritem =new soldieritem();
ss.show.play(0);
 
可以添加 监听函数 监听动画播放结束
ss.show.on(Event.COMPLETE, this, onAnimComplete);
 
 
good luck:)

nevercai

赞同来自:

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会编译报错。
可以强制转换一下 (<any>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();
...

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作