【CocosCreator】实现自定义原地踏步动画

首先明确,所谓的动画,就是将一组图片按照一定的顺序在一定的时间中播放出来。

首先将一张猴子精灵图拖动到场景编辑器中:

然后通过其属性检查器,可以看到当前精灵图存在一个 SpriteFrame 属性:

也就是说,如果我们想要实现猴子行走,只需要改变这个 SpriteFrame 属性的值即可。

在资源管理器窗口的assets目录下新建一个 monkeyWalkAnimation 脚本,然后来到层级管理器中,点击选中猴子精灵图,然后将资源管理器中的 monkeyWalkAnimation 脚本拖动到属性检查器的"添加组件"按钮上,为该精灵图添加脚本:

双击资源管理器中的 monkeyWalkAnimation 脚本,会在VSCode中打开该脚本文件(前提是安装了VSCode)。

首先对动画属性进行分析,控制这个动画需要如下属性:

  1. 动画播放速度:speed,number,默认值为0.1,表示1秒10帧;
  2. 帧动画数组:sprites,SpriteFrame,默认值为空数组,每一个元素代表1帧图片;
  3. 是否播放动画:isWalking,boolean,默认值为true;
  4. 当前播放帧下标:index,number,默认值为0,表示当前正在播放第几帧;
  5. 定时器:timer,number,默认值为0,用于判断是否需要播放下一帧;

其中,前面3个属性是可以被外部控制的,因此需要通过property装饰器进行装饰,目前代码如下:

ts 复制代码
import { _decorator, Component, Node, SpriteFrame, Sprite } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('monkeyWalkAnimantion')
export class monkeyWalkAnimantion extends Component {
    @property({ type: Number, displayName: '动画速度' })
    private speed: number = 0.1 // 1s10帧
    
    @property({ type: SpriteFrame, displayName: '帧动画数组' })
    private sprites: SpriteFrame[] = []
    
    @property({ type: Boolean, displayName: '是否播放动画' })
    private isWalking: boolean = true
    
    private index: number = 0 // 当前播放帧下标
    private timer: number = 0 // 计时器
    
    start() {}
    update(){}
}

此时,回到CocosCreator,会发现精灵图的属性检查器窗口多出来了几个配置项:

就是我们刚刚在代码中定义的属性,在帧动画数组后面输入3,表示该属性有3个元素,然后将资源管理器窗口的每一帧图片按顺序拖动到对应元素位置中即可。

然后回到VsCode中,完善update方法:

ts 复制代码
    update(deltaTime: number) {
        if (this.isWalking) {
            // 播放动画
            // 计时器增加
            this.timer += deltaTime
            if (this.timer >= this.speed) {
                this.timer = 0
                // 更改帧下标
                this.index++
                if (this.index >= this.sprites.length) {
                    this.index = 0 // 超出范围置零
                }
                // 更换帧图片
                this.getComponent(Sprite).spriteFrame = this.sprites[this.index]
            }
        }
    }

上面的代码中,要注意的就是:

ts 复制代码
this.getComponent(Sprite).spriteFrame = this.sprites[this.index]

这行代码的意思就是,获取当前精灵的spriteFrame属性,将其赋值为xxx值。

回到CocosCreator,点击顶部的预览,就可以看到猴子在走路了。

相关推荐
迅猛龙办公室4 小时前
Python输出当前计算机的系统日期和时间
开发语言·前端·python
小狼154545 小时前
浏览器扩展脚本为什么有时候不生效:注入时机、iframe 和单页路由,多多开票助手
前端·chrome
じòぴé南冸じょうげん5 小时前
油猴脚本突然发现变成灰色了,无法使用?页面不生效?刷新页面没反应?
前端
Csvn6 小时前
组合式 API(Composition API)
前端
火柴就是我8 小时前
Android 打包报错 25.0.3
android·前端
BD_Marathon8 小时前
消息对象中字段的说明
java·前端·python
八荒启·交互动画8 小时前
Web特效025—用 Canvas 2D 做Web特效的定义与边界:这支画笔能做到哪一步
前端·webgl·网页特效·八荒启-交互动画·八荒启
Ai-_Man8 小时前
您您这可以把Dola的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。用AI导出鸭,答案是可以的
开发语言·前端·人工智能·小程序
excel8 小时前
Nuxt 中使用 useHead 优化 SEO 与 GEO
前端
IT_陈寒9 小时前
SpringBoot启动慢得像蜗牛?原来是这个配置在捣鬼
前端·人工智能·后端