因为动画需求的量大,今天笔者在cocosCreator中使用代码创建动画出现了闪烁现象,做个笔记:
cc.Class({
extends: cc.Component,
properties: {
monsterPre:{
type:cc.Prefab,
default:null
},
monsterFrameArr:{
type:[cc.SpriteFrame],
default:[]
},
monsterAniFrame:{
type:cc.SpriteAtlas,
default:null
},
map:null
},
getMonsterMoveClip:function(type,dir)
{
let temp=new Array()
let began=1
switch(dir)
{
case dir_up_down:
{
began=1
break
}
case dir_down_up:
{
began=13
break
}
case dir_left_right:
{
began=9
break
}
case dir_right_left:
{
began=5
break
}
}
for(let i=began;i<began+4;i++)
{
let str=type+"_"
str=i<10?str+"0"+i:str+i
let frame=this.monsterAniFrame.getSpriteFrame(str)
temp[temp.length]=frame //这里要确保每帧是成功获取到的,只获取到第一个会导致动画闪烁
}
let clip=cc.AnimationClip.createWithSpriteFrames(temp,10)//参数1是祯数组,参数2是帧率,帧率越大,持续时间越短
clip.speed=1
clip.wrapMode=cc.WrapMode.Loop
clip.name="dir"+dir
return clip
},
createMonster:function(type,pos)
{
//创建怪物
let monster=cc.instantiate(this.monsterPre)
monster.getComponent(cc.Sprite).spriteFrame=this.monsterFrameArr[type-1]
monster.setPosition(pos)
this.map.node.addChild(monster)
//帧动画赋值
let ani=monster.addComponent(cc.Animation)
for(let i=1;i<=4;i++)
{
ani.addClip(this.getMonsterMoveClip(type,i),("dir"+i))
}
//随机移动
let jsMonster=monster.getComponent("monster")
jsMonster.mapPos=this.map.nodePosToMapPos(pos)
jsMonster.map=this.map
jsMonster._type=type
let randNum=Number((Math.random()*10).toFixed(0))
jsMonster.dir=(randNum%4)+1
jsMonster.move()
},
// onLoad () {},
start () {
},
// update (dt) {},
});