网易首页 > 网易号 > 正文 申请入驻

Cocos Creator中的Tween

0
分享至

最新的Cocos Creator 3.x版本使用了Tween系统来代替原来的Action系统,很多小伙伴不明白Tween到底是什么,并且怎么用。今天就来给大家讲解一下Tween吧,希望能够帮助大家快速掌握Tween的使用,并且对Tween有一个更加深入的了解。先来看一张UML图:

此UML图中,涉及到两个新的类Tween以及TweenAction,下面分别介绍。

何为TweenAction

新增的TweenAction类从ActionInterval派生(图中简化成从Action派生),它是一个非常特殊的Action,能够针对目标对象的多个任意属性进行指定的缓动方式进行变换。只要目标对象的属性能够直接赋值和取值,那么这个TweenAction就能够胜任。后面的by接口和to接口就是用这个TweenAction实现的。它的强大之处在于,不用像以前的版本那样,每一个属性都要实现重复代码的Action类。是不是非常灵活和强大?

何为props

props其实就是TweenAction需要进行变换的属性,它其实就是一个键值对数据结构,键为对象的属性名称,值为进行变换的值。例如:

{ angle: 360, position: v3(100, 80, 10) }
ITweenOption

ITweenOption其实就是进行变换的缓动方式以及变换过程中的回调。你可以指定如下属性:
1. easing: 缓动方式
2. progress: 插值函数,这个是用来自定义缓动方式的
3. onStart: 缓动动作启动时的回调函数
4. onUpdate: 缓动动作更新时的回调函数
5. onComplete: 缓动动作完成时的回调函数

何为Tween

Tween作为一个类,本质上其实就是一个Action的建造器或者创建器,类似ActionBuilder或者ActionCreator,负责Action的创建是它的主要职责之一。在使用的时候,你可以告诉这个Tween对象,我需要添加什么样的Action到内部缓冲中,也可以添加多个Action或者Tween来组合成一个串行的Action或者并行的Action。

Tween的另一个职责就是它内部维护一个最终的Action,并且可以控制这个Action的启动与停止。

Tween类的内部有几个重要成员:
1. _target: 目标对象,比如节点
2. _actions: 类型为Action[],创建过程中的一组Action缓冲
3. _finalAction: 创建完成之后的最终使用的Action

Tween类的几个重要接口:
1. target: 设置目标对象
2. delay: 添加一个DelayAction
3. to: 添加一个TweenAction来将指定的属性变换(每个属性变换到多少,目标值)
4. by: 添加一个TweenAction来将指定的属性变换(每个属性变换多少,变化值)
5. union: 将缓冲中的多个Action变成一个串行Action
6. sequence: 将指定的多个Action或者Tween变成一个串行Action后添加到缓冲中
7. parallel: 将指定的多个Action或者Tween变成一个并行Action后添加到缓冲中
8. start: 开始运行,此时会创建最终的Action,并且启动此Action。
9. stop: 停止Action的运行

Tween的使用

知道原理并且知道几个重要接口之后,使用起来就比较简单了。使用步骤如下:

1. 创建一个Tween对象(new Tween)
2. 往Tween里面添加一个一个的Action创建(to, by, then, ......)
3. 执行Tween对象,引擎会完成最终的Action创建,并且启动Action(start)

例如:在2秒以内,让A物体从当前位置,移动到(100, 80, 10)位置,代码如下:

1. 你要改变A物体位置,所以Tween的目标对象是A物体所在节点。

// 创建了一个针对A物体节点的Tween对象
let tw =newTween(A物体对应节点);

2. 添加中间执行过程Action,这个执行过程可以是一个,也可以是多个。这里我们要将目标从当前位置移动到(100, 80, 10)的位置,并且旋转到360度,所以使用Tween对象的to函数来指定:

tw.to(时间(2s), 属性列表{})

上面的属性列表,可以填写Tween针对的目标对象实例中的任意属性,我们这里是angle和position,所以如下的代码:

tw.to(2.0, {angle:360,position:v3(100,80,10) });

这样就给目标物体创建了一个Action,2s之内从当前位置移动到了目标位置(100, 80, 10),并且旋转了360度。

3. 启动执行这个tween对象:

tw.start();

最后整体代码如下:

// step1: 创建一个针对目标的Tween对象
let tw = newTween(this.node);
// step2: 添加执行过程
tw.to(2.0, {angle:360,position:v3(100,80,10) });
// step3: 开始执行tween对象
tw.start();
Tween可以添加哪些过程

我们可以去查看一下Tween的API文档,在代码编辑器里面右键Tween对象,然后再点击"Go to Definition"

这样可以知道往这个Tween里面可以添加哪些Action。这些接口在creator.d.ts里面都有,这里就不再重复编写。下面再总结一下:
1. by和to方式的Action添加,只要目标对象的属性是可直接读取和设置的,就可以。例如节点的angle属性,就可以直接读取和赋值。
2. 一些特殊形式的Action添加,其实这个也就那么几个,比如delay、show等等

Tween的源码实现

如果你想更加深入的了解Tween,可以打开Cocos引擎源码tween/tween.ts直接看源代码。你会发现代码并不多,也就500行代码左右,逻辑也非常简单。我建议把这个类完整的看一遍,并且也建议花点时间把TweenAction类也完整的看一遍,这样使用起来会更加得心应手,并且心中有数。

好吧,希望这篇文章能够帮到大家。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
俄阵亡人数罕见暴涨,乌军在哈尔科夫有意外惊喜

俄阵亡人数罕见暴涨,乌军在哈尔科夫有意外惊喜

听风听你
2024-05-14 12:00:14
张艺谋妻子陈婷发文:“对不起,我没有那么大的格局”

张艺谋妻子陈婷发文:“对不起,我没有那么大的格局”

娱乐八卦木木子
2024-05-16 16:00:25
中国移动倒下了,剩下的另外两家还能坚持多久?51万仅仅是开始?

中国移动倒下了,剩下的另外两家还能坚持多久?51万仅仅是开始?

芯怡飞
2024-05-17 22:00:04
中石油到底是谁的中石油呢?

中石油到底是谁的中石油呢?

翻开历史和现实
2024-05-18 14:59:16
15岁儿子被气枪打成“植物人”?联系肇事者,对方说……

15岁儿子被气枪打成“植物人”?联系肇事者,对方说……

北青网-北京青年报
2024-05-18 11:51:20
康利4次抢七失利是否想为他赢一场?华子:我想为我自己赢

康利4次抢七失利是否想为他赢一场?华子:我想为我自己赢

直播吧
2024-05-19 08:04:13
大反转!哈尔科夫枪炮渐稀,乌军92旅越境攻入俄本土

大反转!哈尔科夫枪炮渐稀,乌军92旅越境攻入俄本土

史政先锋
2024-05-17 22:15:00
泪洒记者会!陈菁徽臀部大片瘀青照曝光,王鸿薇痛批民进党是暴力党

泪洒记者会!陈菁徽臀部大片瘀青照曝光,王鸿薇痛批民进党是暴力党

海峡导报社
2024-05-18 16:49:04
惨烈的时候就快来了。。

惨烈的时候就快来了。。

重远投资观
2024-05-17 10:41:39
两名中国籍男女卖假香奈儿被捕,日本警方居然用赃物摆出了「CHANEL」的造型?

两名中国籍男女卖假香奈儿被捕,日本警方居然用赃物摆出了「CHANEL」的造型?

日本物语
2024-05-18 18:31:49
县城的现状,一针见血!

县城的现状,一针见血!

深度知局
2024-05-18 18:01:33
国家队下场!史诗级救市,来了

国家队下场!史诗级救市,来了

国民经略
2024-05-17 14:16:30
贵阳交警放行不戴头盔的外国人,贵阳官方评论区沦陷

贵阳交警放行不戴头盔的外国人,贵阳官方评论区沦陷

微光年
2024-05-18 09:43:43
周末“打虎”!正部级“一把手”任上被查,3天前还在外地开会

周末“打虎”!正部级“一把手”任上被查,3天前还在外地开会

政知新媒体
2024-05-18 16:40:30
72岁部级高官突然死亡,死前严重脱相,曾称中国食品安全世界第一

72岁部级高官突然死亡,死前严重脱相,曾称中国食品安全世界第一

求实者
2024-05-17 22:48:56
晚上11点,曼城争冠夜:4种结果,输球也能卫冕,瓜迪奥拉7年6冠

晚上11点,曼城争冠夜:4种结果,输球也能卫冕,瓜迪奥拉7年6冠

侃球熊弟
2024-05-19 05:55:02
极限48小时!若张康阳下周二前无法凑齐3.75亿,意甲冠军国米易主

极限48小时!若张康阳下周二前无法凑齐3.75亿,意甲冠军国米易主

直播吧
2024-05-18 20:55:36
2-1!补时绝杀地狱到天堂 1.4亿战舰赛季初参加欧冠 末轮神奇保级

2-1!补时绝杀地狱到天堂 1.4亿战舰赛季初参加欧冠 末轮神奇保级

狍子歪解体坛
2024-05-18 23:31:18
宁夏吴忠再通报“爆炒羊羔肉掺杂鸡肉”事件:拟罚涉事店铺1万元

宁夏吴忠再通报“爆炒羊羔肉掺杂鸡肉”事件:拟罚涉事店铺1万元

新京报
2024-05-18 22:22:08
面对史诗级救市,想说几句不中听的忠言

面对史诗级救市,想说几句不中听的忠言

木蹊说
2024-05-18 10:50:02
2024-05-19 08:30:45
灿烂的星海游戏开发
灿烂的星海游戏开发
不定期发布游戏开发教程
5文章数 12关注度
往期回顾 全部

科技要闻

高合复活!

头条要闻

雷军直播开车遭遇恶意别车 直呼"真的想举报他"

头条要闻

雷军直播开车遭遇恶意别车 直呼"真的想举报他"

体育要闻

天赋最差的人,成为NBA最强替补控卫

娱乐要闻

《庆余年2》首播口碑出炉!有好有坏

财经要闻

史诗级利好,房地产这次有救了吗?

汽车要闻

智驾升级/月底上市 问界新M7 MAX焕新版

态度原创

游戏
艺术
家居
本地
健康

BLG击败T1之战,刷新海外观赛人数新记录!Bin的表现,征服韩国人

艺术要闻

真诚度101%,35岁的诚品画廊为什么选择北京?

家居要闻

遇见交响 音乐流动在设计之中

本地新闻

博物馆的正确打开方式|来河南,沉浸式体验中原文明

在中国,到底哪些人在吃“伟哥”?

无障碍浏览 进入关怀版