CocosCreator3.8第二节缓动动画

文章介绍了在CocosCreator(cc)中使用缓动系统(tween)创建动画效果,如节点缩放、Label文本变化、对象位置跳跃以及颜色变换,同时展示了如何控制动画的生命周期和缓动函数。

缓动系统

/*
 * @Author: Coat 654264424@qq.com
 * @Date: 2024-01-26 10:31:06
 * @LastEditors: Coat 654264424@qq.com
 * @LastEditTime: 2024-01-26 11:01:41
 * @FilePath: \NewProject\assets\GameRoot.ts

 */
import { _decorator, v3, tween, Component, EventTouch, Node, log } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('GameRoot')
export class GameRoot extends Component {
    // 访问其他节点
    @property(Node) button: Node;
    @property(Node) a: Node;
    start() {
        this.button.on(Node.EventType.TOUCH_START, (event: EventTouch) => {
            // x,y缩放
            this.button.setScale(0.9, 0.9)
        })
        this.button.on(Node.EventType.TOUCH_END, (event: EventTouch) => {
            // x,y缩放
            this.button.setScale(1, 1)

            //触发动画 缓动系统
            this.myAnimation()
        })
    }
    myAnimation() {
        // 改变对象目标的方法
        // 把a 1s内位置  to 和 by 方法
        // to是从当前属性到目标属性  by是累加量
        // to 的第一个参数是时间,第二个参数 是想改变属性值得一个对象
        //从 0 位置到达 200位置
        tween(this.a)
            .to(1, { position: v3(0, 200, 0) })
            .start()

        // 实现
        const obj = {
            n: 0
        }
        // 第三个参数是生命周期 完成 开始 和每帧调用
        // 最常用的是onUpdate 第一个是目标对象,第二个是缓动完成度 0~1
        tween(obj)
            .to(3, { n: 1000 }, {
                onUpdate: (target, ratio) => {
                    console.log(target,ratio);

                }
            })
            .start()
    }
    update(deltaTime: number) {

    }
}



目标对象和完成度

修改label组件文字 0 ~ 1000

import { _decorator, v3, tween, Component, EventTouch, Node, log,Label } from 'cc';
@property(Node) LableNode: Node;
 // 获取label组件
        const comp = this.LableNode.getComponent(Label)
        // 第三个参数是生命周期 完成 开始 和每帧调用
        // 最常用的是onUpdate 第一个是目标对象,第二个是缓动完成度 0~1
        tween(obj)
            .to(3, { n: 1000 }, {
                onUpdate: (target, ratio) => {
                    console.log(target,ratio);
                    comp.string = `${obj.n}`
                }
            })
            .start()

加入动画

tween(obj)
            .to(3, { n: 200 }, {
                onUpdate: (target, ratio) => {
                    console.log(target,ratio);
                    comp.string = `${obj.n.toFixed(2)}`
                },
                // 缓动函数,参考官方文档 超出在回弹 模拟跳跃 抛物线 由慢变快
                easing:'elasticOut'
            })
            .start()

跳跃效果 tween

tween(obj)
            .to(3, { n: 200 }, {
                onUpdate: (target, ratio) => {
                    this.a.setPosition(0,obj.n)
                },
                // 缓动函数,参考官方文档 超出在回弹 模拟跳跃 抛物线 由慢变快
                easing:'quadOut'
            })
            .to(3, { n: 0 }, {
                onUpdate: (target, ratio) => {
                    this.a.setPosition(0,obj.n)
                },
                // 缓动函数,参考官方文档 超出在回弹 模拟跳跃 抛物线 由慢变快
                easing:'quadIn'
            })
            .start()

直接拿到Label

 @property(Label) LableCom: Label;//label类型
 // 获取label组件 直接用
        const comp = this.LableCom

循环跳跃 tween

tween(obj)
            .to(0.5, { n: 200 }, {
                onUpdate: (target, ratio) => {
                    this.a.setPosition(0,obj.n)
                },
                // 缓动函数,参考官方文档 超出在回弹 模拟跳跃 抛物线 由慢变快
                easing:'quadOut'
            })
            .to(0.5, { n: 0 }, {
                onUpdate: (target, ratio) => {
                    this.a.setPosition(0,obj.n)
                },
                // 缓动函数,参考官方文档 超出在回弹 模拟跳跃 抛物线 由慢变快
                easing:'quadIn'
            })
            .union() //一直跳跃
            .repeatForever() //一直跳跃
            .start()

循环跳跃第二种写法

   tween(obj)
            .repeatForever(
                tween(obj)
            .to(0.5, { n: 200 }, {
                onUpdate: (target, ratio) => {
                    this.a.setPosition(0,obj.n)
                },
                // 缓动函数,参考官方文档 超出在回弹 模拟跳跃 抛物线 由慢变快
                easing:'quadOut'
            })
            .to(0.5, { n: 0 }, {
                onUpdate: (target, ratio) => {
                    this.a.setPosition(0,obj.n)
                },
                // 缓动函数,参考官方文档 超出在回弹 模拟跳跃 抛物线 由慢变快
                easing:'quadIn'
            })
            ) //一直跳跃
            .start()

停止tween tag

 tween(obj)
            .tag(111)
                .to(10,{n:this.a.position.x - 300}, {
                    onUpdate: (target, ratio) => {
                        this.a.setPosition(obj.n,this.a.position.y)
                    },
                })
                .start()
          //通过加标签
    Tween.stopAllByTag(111)

停止tween 方法二 this.leftTween.stop()

import { _decorator, v3, tween, Component, EventTouch, Node, log,Label, Tween } from 'cc';
 leftTween: Tween<object>
 this.leftTween =   tween(obj)
                .to(10,{n:this.a.position.x - 300}, {
                    onUpdate: (target, ratio) => {
                        this.a.setPosition(obj.n,this.a.position.y)
                    },
                })
                .start()
     this.leftTween.stop()

例如颜色变换

 const color = new Vec3(255,255,255)
          tween(color)
          .to(3,{x:10,y:50,z:0},{
            onUpdate:()=> {
                console.log(color.x,color.y,color.z);
                
                this.LableCom.color = new Color(color.x,color.y,color.z)
            },
          })
          .start()

循环变色

 tween(color)
          .to(3,{x:10,y:50,z:0},{
            onUpdate:()=> {
                console.log(color.x,color.y,color.z);
                
                this.LableCom.color = new Color(color.x,color.y,color.z)
            },
          })
          .to(3,{x:10,y:50,z:100},{
            onUpdate:()=> {
                console.log(color.x,color.y,color.z);
                
                this.LableCom.color = new Color(color.x,color.y,color.z)
            },
          })
          .union()
          .repeatForever()
          .start()
<think>好的,用户想要寻找Cocos Creator 3.8版本的实战教程、开发指南和示例项目。我需要根据提供的引用内容来整理相关信息,并结合自己的知识给出建议。 首先,引用[1]提到了后期效果Shader的编写,说明官方文档中有相关的基础教程。引用[2]和[5]提到了程序化创建动画剪辑和UI交互的示例,这可能指向官方文档中的动画模块和组件使用部分。引用[3]和[4]涉及触摸事件适配和组件结构,说明文档中还有关于事件处理和节点组件的内容。 接下来,我应该将这些引用内容归类,指出官方文档的不同部分,比如基础功能、动画系统、事件处理、资源管理等。然后,建议用户访问官方文档的主页,并提供具体路径,比如动画系统、UI组件等章节。此外,示例项目部分可以推荐官方提供的示例仓库,如GitHub上的cocos-creator/test-cases-3d,以及社区资源如论坛和GitHub上的开源项目。 还需要考虑用户可能的实际需求,比如是否需要视频教程或社区支持。因此,可以补充推荐B站和Cocos中文社区的链接。最后,提醒用户注意版本兼容性,确保教程或资源适用于3.8版本。 总结回答结构:官方文档的几个关键部分、示例项目、社区资源、注意事项。确保信息准确,引用正确的来源,并自然添加引用标识。同时,生成相关问题,帮助用户深入探索。</think>### Cocos Creator 3.8 实战资源与学习指南 #### 一、官方文档与核心功能 1. **基础功能与开发流程** - 官方文档详细介绍了节点操作、组件挂载、资源加载等基础功能。例如,创建空节点是启用后期管线的第一步[^1],通过`this.node.getChildByName()`可获取子节点并操作组件[^5]。 - **关键路径**:官方文档 > 基础手册 > 节点与组件、资源管理。 2. **动画系统开发** - 程序化创建动画剪辑可提升效率。通过脚本态生成`AnimationClip`,结合`SpriteFrame`实现角色动画,减少手编辑工作量[^2]。 - **示例代码**: ```typescript // 态创建动画剪辑 const animationClip = new cc.AnimationClip(); // 添加关键帧与曲线配置 ``` 3. **事件处理与跨平台适配** - 使用`cc.systemEvent`监听触摸/鼠标事件,通过`cc.sys.isMobile`区分平台行为[^3]。 - **代码片段**: ```typescript if (cc.sys.isMobile) { cc.systemEvent.on(cc.SystemEvent.EventType.TOUCH_START, this.onTouchStart, this); } else { cc.systemEvent.on(cc.SystemEvent.EventType.MOUSE_DOWN, this.onMouseDown, this); } ``` 4. **UI 组件与脚本交互** - 节点组件(如`Label`、`EditBox`)可通过`getComponent()`获取并修改属性,例如`editBox.textLabel.string`读取输入内容[^4]。 --- #### 二、实战教程与示例项目 1. **官方示例仓库** - **GitHub 资源**:访问 [cocos-creator/test-cases-3d](https://github.com/cocos-creator/test-cases-3d) 获取 3D 功能示例,包含物理引擎、Shader 编写等高级功能实现[^1]。 2. **社区资源推荐** - **B 站视频教程**:搜索“Cocos Creator 3.8 Shader 教程”或“3.8 动画系统”,可找到引擎效果开发与优化技巧。 - **开源项目**:GitHub 搜索关键词 `Cocos Creator 3.8 game example`,筛选高星仓库学习完整项目架构。 3. **重点学习模块** - **后期效果管线**:参考引用[1]的 Shader 编写方法,实现景深、模糊等效果。 - **资源异步加载**:结合`cc.resources.load`与 Promise 封装,优化大型项目资源管理。 --- #### 三、注意事项 1. **版本兼容性** - 确保教程或项目基于 **Cocos Creator 3.8.0+**,避免 API 变更导致的错误(如旧版`cc.find()`已弃用,需改用节点路径查询)。 2. **调试技巧** - 使用`console.log(this.node._components)`查看节点挂载的组件列表,快速定位脚本或组件问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值