Layaair DragonBones 龙骨动画的播放
本文要点:
- 龙骨动画的导入
- 龙骨动画的播放控制
- 龙骨动画的事件机制
官方文档入口
本节大概效果
龙骨动画的导入:
Layair 导入龙骨动画:
一般导入到 Bin 目录的 Src目录里面,在这里 我创建了一个hero的目录
龙骨动画的加载和播放控制
这是一个 循环播放动画的例子
//这是一个 循环播放动画的例子
let templetStone: Laya.Templet = new Laya.Templet();
templetStone.on(Laya.Event.COMPLETE, this, () => {
//创建第一个动画
var skeleton: Laya.Skeleton;
//从动画模板创建动画播放对象
skeleton = templetStone.buildArmature(0);
skeleton.pos(128, 665);
//切换动画皮肤 使用标号为0的皮肤
skeleton.showSkinByIndex(0);
//播放
skeleton.play(0, true);
this.addChild(skeleton);
});
templetStone.loadAni("res/anima/stone/钱袋动画.sk");
这是一个 有两段 动画的例子, 主角的 空闲时动画 和 一个触发动画
//Hero动画
this.templetHero = new Laya.Templet();
this.templetHero.on(Laya.Event.COMPLETE, this, () => {
//创建第一个动画
// var skeleton: Laya.Skeleton;
// //从动画模板创建动画播放对象
this.skeletonHero = this.templetHero.buildArmature(0);
this.skeletonHero.pos(350, 620);
//切换动画皮肤 使用标号为0的皮肤
this.skeletonHero.showSkinByIndex(0);
//播放
//this.skeletonHero.play(1, true);
//动画事件
this.skeletonHero.on(Laya.Event.LABEL, this, (event) => {
let tEventData: Laya.EventData = event as Laya.EventData;
if (tEventData.time > 100) {
//console.log("动画事件 触发:", tEventData)
Laya.SoundManager.playSound("res/sound/miming.mp3");//播放挖坑声音
}
});
this.skeletonHero.on(Laya.Event.STOPPED, this, () => {
this.isDigging = false
this.ainPlayIdle()
// console.log("Laya.Event.STOPPED this.isDigging :", this.isDigging)
});
this.ainPlayIdle()
this.addChild(this.skeletonHero);
});
this.templetHero.loadAni("res/anima/hero/矿工once.sk");
这个是 播放 第一段 空闲动画 和 播放 触发动画
// 空闲动画
private ainPlayIdle() {
this.skeletonHero.play(1, true);
}
//触发动画
private ainPlayDig() {
// if (!this.isDigging) {
// this.isDigging = true
this.skeletonHero.play(0, false);
// }
}
龙骨动画的事件机制
在动画播放的时候 我们还可以 触发事件,比方说 我的触发动画里有一个 挖矿的动作。我需要在 锄头碰到石头的时候 播放一个音效。
在龙骨动画制作的时候添加一个事件
这样一来 在播放动画的时候 就可以触发一个事件
layaair 是通过 Laya.Event.LABEL 来接收事件的
//动画事件
this.skeletonHero.on(Laya.Event.LABEL, this, (event) => {
let tEventData: Laya.EventData = event as Laya.EventData;
if (tEventData.time > 100) {
//console.log("动画事件 触发:", tEventData)
Laya.SoundManager.playSound("res/sound/miming.mp3");//播放挖坑声音
}
});
有里有另外一个知识点
循环播放
当skeleton.play(0,true)第二个参数为true时,每播放完一遍龙骨动画,会自动触发Event.COMPLET事件skeleton.player.on(Event.COMPLETE,this,onComplete);
播放一次
当skeleton.play(0,false)第二个参数为false时,当前动画播放完成后,会自动触发Event.STOPED事件,而不是Event.COMPLETE事件skeleton.on(Event.STOPPED, this, completeHandler);