Cocos Creator使用序列帧、骨骼创建动画
一、导入资源
动画资源放到resources/model文件夹下,没有则对应新建一个,当然,也可以是其他路径,代码做对应修改就行(下同);
二、创建节点
创建一个节点,并将动画组件和脚本都放在同一个节点;
三、使用序列帧创建动画
1)序列帧+图集(一个.plist文件和一个同名的图片文件如.png)
- 初始化动画组件及点击事件(用于测试)
animComponent:cc.Animation = null;
onload(){
// 获取节点上的cc.Animation组件(此处动画组件和脚本都在同一个节点,不同节点对应修改)
this.animComponent = this.node.getComponent(cc.Animation);
// 点击该节点播放动画
this.node.on("touchend",()=>{
this.animComponent.play(“animName”);
})
}
- 加载图集(文件放在对应的路径下,loadRes()的路径参数默认不用写resources)
cc.loader.loadRes(“model/model”, cc.SpriteAtlas, (err,res)=>{
if(!err){
this.initClips(res);
}
}
- 创建动画
// 创建动画
initClips(res){
// 获取图集res内的所有帧,获得的atlas是一个图片对象数组
let atlas = res.getSpriteFrames();
// 使用一组序列帧图片来创建动画,参数10是播放速率
let clip = cc.AnimationClip.createWithSpriteFrames(atlas,10)
// 设置动画循环模式(此处设为一直循环)
clip.wrapMode = cc.WrapMode.Loop;
// 将动画序列添加到动画组件中,其中animName是自定义的动画名称
this.animComponent.addClip(clip,”animName”);
}
2)序列帧单独放一个文件夹 资源路径示例
1.初始化动画组件及点击事件(用于测试)
animationComponent:cc.Animation = null;
onload(){
// 获取节点上的cc.Animation组件(此处动画组件和脚本都在同一个点,不同节点对应修改)
this.animComponent = this.node.getComponent(cc.Animation);
// 点击该节点播放动画
this.node.on("touchend",()=>{
this.animComponent.play(“animName”);
})
}
2.加载序列帧图片路径(文件放在对应的路径下,loadRes()的路径参数默认不用写resources)
let path = “model/hero”;
cc.loader.loadResDir(path, cc.SpriteFrame, (err,res,url)=>{
if(!err){
this.initClips(path,res,url);
}
}
3.创建动画
// 创建动画
initClips(path,res,url){
// 获取res内的所有帧,获得的sprites是一个图片对象数组
let sprites = [];
for(let i = 1;i < res.length;i++){
if(i < 10)
sprites.push(res[url.indexOf(path + “/0” + i)]);
if(i >= 10)
sprites.push(res[url.indexOf(path + “/” + i)]);
}
// 使用一组序列帧图片来创建动画,参数res.length是播放速率
let clip = cc.AnimationClip.createWithSpriteFrames(sprites, res.length)
// 设置动画循环模式(此处设为只播放一次)
Clip.wrapMode = cc.WrapMode. Normal;
// 将动画序列添加到动画组件中,其中animName是自定义的动画名称
this.animComponent.addClip(clip,”animName”);
}
四、使用骨骼动画
资源路径示例
脚本和组件放同一个节点(不强制)
1.初始化动画组件(用于测试)
skeComponent:sp.Skeleton;
onload(){
// 绑定节点上的骨骼动画组件
this.skeComponent = this.node.getComponent(sp.Skeleton);
}
2.加载骨骼动画路径(文件放在对应的路径下,loadRes()的路径参数默认不用写resources)
let path = “model/ hero1/r_0003”;
cc.loader.loadResDir(path, sp.SkeletonData, (err, skeData)=>{
if(!err){
// 绑定数据
this.skeComponent.skeletonData = skeData;
// 设置播放动画
this.skeComponent.setAnimation(0,"move",true);
}
}
骨骼动画的动画名称(设置时用到):可以将动画拉到组件上,查看每个动画的名称
