在CocosCreator的3.x版本中实现贝塞尔曲线

2023-10-27

使用环境参考

CocosCreator v3.7.3

前情提要

在之前的 2.x 版本中,CocosCreator 关于贝塞尔曲线是内置了 API,可以让节点动画直接使用。但在升级到 tween 实现后,灵活了但没有了现成的贝塞尔曲线的实现方法。需要自己实现一下:

二次贝塞尔曲线(一个控制点的),为了方便观察,我用绘图组件示意了一下路径

import { _decorator, Component, Graphics, Node, tween, v3, Vec3 } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('BTest1')
export class BTest1 extends Component {
    @property(Graphics) graphics: Graphics = null;
    @property(Node) box: Node = null;

    start() {
        // 绘制路径做对比
        this.graphics.moveTo(0, 0);
        this.graphics.quadraticCurveTo(200, 300, 200, 200);
        this.graphics.stroke();

        // 三维空间的缓动
        const quadraticCurve = (t: number, p1: Vec3, cp: Vec3, p2: Vec3, out: Vec3) => {
            out.x = (1 - t) * (1 - t) * p1.x + 2 * t * (1 - t) * cp.x + t * t * p2.x;
            out.y = (1 - t) * (1 - t) * p1.y + 2 * t * (1 - t) * cp.y + t * t * p2.y;
            out.z = (1 - t) * (1 - t) * p1.z + 2 * t * (1 - t) * cp.z + t * t * p2.z;
        }

        const startPos = v3(0, 0, 0);
        const controlPos = v3(2, 3, 0);
        const endPos = v3(2, 2, 0);

        const tempVec3 = v3();
        
        tween(this.box).to(3, { position: endPos }, { onUpdate: (target, ratio) => {
            quadraticCurve(ratio, startPos, controlPos, endPos, tempVec3);
            this.box.setPosition(tempVec3);
        }}).start();
    }
}

接下来是两个控制点的,这个三次贝塞尔的计算公式 CocosCreator 进行了内置,不过是一维的,搞成三维:

import { _decorator, bezier, Component, Graphics, Node, tween, v3, Vec3 } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('BTest1')
export class BTest1 extends Component {
    @property(Graphics) graphics: Graphics = null;

    @property(Node) box: Node = null;

    start() {
        // 绘制路径做对比
        this.graphics.moveTo(0, 0);
        this.graphics.bezierCurveTo(80, 400, 200, 50, 200, 200);
        this.graphics.stroke();

        // 三维空间的缓动
        const bezierCurve = (t: number, p1: Vec3, cp1: Vec3, cp2: Vec3, p2: Vec3, out: Vec3) => {
            out.x = bezier(p1.x, cp1.x, cp2.x, p2.x, t);
            out.y = bezier(p1.y, cp1.y, cp2.y, p2.y, t);
            out.z = bezier(p1.z, cp1.z, cp2.z, p2.z, t);
        }

        const startPos = v3(0, 0, 0);
        const controlPos1 = v3(0.8, 4, 0);
        const controlPos2 = v3(2, 0.5, 0);
        const endPos = v3(2, 2, 0);

        const tempVec3 = v3();
        
        tween(this.box).to(3, { position: endPos }, { onUpdate: (target, ratio) => {
            bezierCurve(ratio, startPos, controlPos1, controlPos2, endPos, tempVec3);
            this.box.setPosition(tempVec3);
        }}).start();
    }
}

总结

将以上方法封装到自己的 Util 中就可以愉快滴使用啦!

我是阔阔,一位喜欢研究的程序员!

个人网站:www.kuokuo666.com

2023!Day Day Up!
可以愉快滴使用啦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在CocosCreator的3.x版本中实现贝塞尔曲线 的相关文章

  • Haskell学习——语法

    if then else Haskell是以表达式为主导的语言 expression oriented 所有语句必须要能给出一个具体的值 比如我们喜闻乐见的if else结构 Prelude gt if True then 1
  • 《数值分析》-- 高斯求积公式

    文章目录 概述 一 高斯型求积公式的一般理论 1 1 高斯型求积公式和高斯点 1 2 高斯点的特征 二 常用的高斯求积公式 2 1 高斯 勒让德求积公式 Gauss Legendre 2 2 高斯 切比雪夫求积公式 Gauss Chebys
  • 让生产力加倍的ChatGPT快捷指令

    我的新书 Android App开发入门与实战 已于2020年8月由人民邮电出版社出版 欢迎购买 点击进入详情 Why use ChatGPT Shortcut 简化流程 ChatGPT Shortcut 提供了快捷指令表 可以快速筛选和搜
  • OpenGL视频资料(LearnOpenGL中文)经典教材讲解

    OpenGL视频资料 LearnOpenGL中文 经典教材讲解 1 是中文 台湾的傅老师 讲的非常好 而且还是免费的 感谢傅老师的分享 视频地址 2 视频目录 讲解的非常仔细 可以说是手把手教 而且是openGL经典入门教材LearnOpe
  • [Python] Python基础入门笔记

    本篇是B站Python基础视频 有C Java编程基础容易理解 120分钟入门Python的学习笔记 Python基础笔记 一 Python 简介 1 Python执行过程 2 执行模式 二 语法规则 三 函数 1 内置函数 range 2

随机推荐

  • java基础练习—逢七游戏、不死神兔、百钱百鸡、利滚利

    1 逢七游戏 逢七过 规则是 从任意一个数字开始报数 当你要报的数字包含7或者是7 的倍数时都要说 过 为了帮助大家更好的玩这个游戏 这里我们直接在控制台打印出1 100之间的满足逢七必过 规则的数据 package com bdit pu
  • ThinkCentre进入BIOS,设置intel virtualization technology

    VMware安装提示cpu虚拟化intel virtualization technology ThinkCentre重启长按F1 按enter 开启intel virtualization technology F10保存即可 转载于 h
  • git团队开发使用流程概述和注意点

    重新温习了一下git 这篇文章主要总结一下使用git做开发的整体流程 所以不会做过多的git指令的详细说明 整体流程 这里我在本地进行模拟 我希望模拟达到的效果是 一共有4个端 project是一个仓库 manager是项目负责人 zs和l
  • 【面试】Java 必知必会

    必知必会 1 面向对象可以解释下么 都有哪些特性 关于封装 关于继承 重写 Override 关于多态 重载 如果只有方法返回值不同 可以构成重载吗 在 Java 中 什么时候使用重载 什么时候使用重写 子类对象作为父类对象使用 向上转型
  • 【Antlr】识别常见的词法结构

    1 概述 语法分析器通过输入的词法符号流来识别特定的语言结构 词法分析器通过输入的字符流来识别特定的语言结构 词法规则以大写字母开头 文法规则以小写字母开头 例如 ID是一个词法规则名 而expr是一 个文法规则名 2 配置标识符 在语法的
  • 数据结构—顺序表的初始化与销毁(C语言详细解读版1/3)

    顺序表 顺序表 SqList Sequence List 即顺序线性表 顺序表是在计算机内存中以数组的形式保存的线性表 是指用一组地址连续的存储单元依次存储数据元素的线性结构 使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中
  • 自动售卖系统开发系列——人脸识别自动售卖机三代BrotherSharp

    大纲 售卖机三代BrotherSharp的简介 售卖机三代BrotherSharp的方案介绍 系统整体组成 软件平台 硬件平台 售卖机三代BrotherSharp的实现过程 功能实现论述 软件流程图 源码 售卖机三代BrotherSharp
  • ArcGIS Desktop 遇到严重的应用程序错误

    由于项目初验 忙了几个月 感觉忙得并不值 好久都没更新博客了 一 问题 在关闭ArcMap时 ArcGIS Desktop 遇到严重的应用程序错误 环境是Windows 10 新装的系统 以前出现这种问题 一般有两种情况 一是ArcGIS
  • Pycharm调试debug指导

    PyCharm的调试有两种显示模式 Debugger和Console Debugger处以列表形式 列出每个元素的内容 Console处与直接Run输出类似 Debugger模式 Step Over Step Into 区别 调试方式 快捷
  • FutureTask详解

    前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到网站 FutureTask介绍 一个可取消的异步计算 FutureTask提供了对Future的基本实现 可以调用方法去开始和取消一个计算 可以查询
  • Line-in和Mic-in的区别和使用及Line-out

    Line in和Mic in的区别 http blog 163 com why ann 2001 blog static 331376200821391621467 我们的电脑声卡上 一般都会有Line in和Mic in两个接口 翻译成中
  • 【SAML2.0】概念盲扫

    目录 一 SAML是什么 二 SAML 1 SAML的构成 2 SAML的流程分析 3 SAML的优点 简介 安全断言标记语言 英语 Security
  • final的分析

    源自 http www cnblogs com dolphin0520 p 3736238 html 1 修饰类 当用final修饰一个类时 表明这个类不能被继承 2 修饰方法 使用final方法的原因有两个 第一个原因是把方法锁定 以防任
  • 寻找第k大元素,时间复杂度是多少?

    寻找第k大元素可以通过多种算法实现 其中时间复杂度最优的是基于快速排序的算法 称为快速选择 QuickSelect 算法 快速选择算法的基本思想是选择一个基准元素 然后将数组划分为比基准元素小和比基准元素大的两个子数组 如果第k大元素在比基
  • 关于图像的傅里叶变换的理解

    最近再学opencv关于图像的傅里叶变换的知识 自己感觉很难理解 查阅相关书籍和博客发现很多写的都比较含糊 下面是转载自知乎一个博主关于图像的傅里叶变换的通俗解释 通俗讲解 图像傅里叶变换 文末加了一点冈萨雷斯 数字图像处理 中的关于频谱中
  • Arduino for ESP8266&ESP32适用库ESPAsyncWebServer:请求与响应

    文章目录 目的 解析客户端请求 服务器进行响应 URL重定向 总结 目的 WebServer功能很多 最主要的一块就是解析来自用户的HTTP请求 然后根据功能需求将响应的消息发送给客户 这篇文章将粗略介绍ESPAsyncWebServer中
  • 组成原理---控制器

    文章目录 控制器的组成及指令的执行 基本的计算机组成和功能 控制器的组成 时序及控制方式 数据通路和指令的执行过程 简单计算机系统主机各部件的实现方案 简单计算机系统中指令的执行过程 MIPS单周期CPU的数据通路和指令的执行过程 硬布线控
  • 机器学习实战——6.支持向量机

    目录 6 1 基于最大间隔分隔数据 6 2 寻找最大间隔 6 2 1 分类器求解的优化问题 6 2 2 SVM应用的一般框架 6 3 SMO高效优化算法 6 3 1 Platt的SMO算法 6 3 2 应用简化版SMO算法处理小规模数据集
  • springboot 全局异常处理类

    目录标题 springboot 全局异常处理类 依赖 代码 springboot 全局异常处理类 依赖
  • 在CocosCreator的3.x版本中实现贝塞尔曲线

    使用环境参考 CocosCreator v3 7 3 前情提要 在之前的 2 x 版本中 CocosCreator 关于贝塞尔曲线是内置了 API 可以让节点动画直接使用 但在升级到 tween 实现后 灵活了但没有了现成的贝塞尔曲线的实现