cocosCreator帧动画闪烁问题笔记

因为动画需求的量大,今天笔者在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) {},
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值