【CocosCreator问题总结】MotionStreak效果显示异常

  • 📢博客主页:肩匣与橘
  • 📢欢迎点赞 👍 收藏留言 📝 如有错误敬请指正!
  • 📢本文由肩匣与橘编写,首发于CSDN🙉
  • 📢生活依旧是美好而又温柔的,你也是✨ 

Cocos Creator 小科普

  • Cocos Creator是一个基于 Cocos2d-x 引擎的游戏开发工具,可以用于制作2D和3D游戏,也可以用于开发跨平台应用程序。
  • Cocos Creator提供了一系列的工具和编辑器,可以帮助开发者快速地创建游戏场景、设计游戏逻辑、调试游戏性能等。
  • Cocos Creator支持多平台发布,包括WebiOSAndroidWindowsMac等平台,可以帮助开发者快速地发布游戏并将其推向全球市场。
  • Cocos Creator提供了丰富的社区资源和技术支持,可以帮助开发者解决开发过程中遇到的各种问题。

目录

❓问题描述

❔组件原理

❗解决方法

①方法一

②方法二

🆗总结


❓问题描述

       CocosCreator更新到2.4.9后cc.MotionStreak被添加到场景时,总会马上创建一个(0,0)到拖尾所在节点位置的拖尾效果。如图:

❔组件原理

       解决MotionStreak显示错误问题,首先了解一下该组件的原理。在编译阶段,Cocos Creator 将拖尾组件所需的资源文件(如纹理、材质等)打包成一个粒子系统文件,并将其保存到项目中的资源目录中。在运行时,当拖尾组件被添加到游戏对象中时,Cocos Creator 会从资源目录中加载粒子系统文件,并将其实例化成一个粒子系统对象。

       在底层逻辑中,拖尾组件主要是通过创建一系列的粒子来模拟拖尾效果。当游戏对象移动时,拖尾组件会在其路径上创建一系列的粒子,这些粒子会依次连接起来形成拖尾效果。每个粒子都有自己的位置、速度、加速度、生命周期等属性,这些属性会在每一帧中被更新。粒子的位置和方向的计算是基于拖尾节点的位置和方向进行的,因此当拖尾节点移动时,粒子的位置和方向也会相应地更新。

❗解决方法

       在经过查阅后发现问题所在:

       因为在CCMotionStreak插入了这个_lastWPos… 这个lastWPos 会在拖尾组件MotionStreak中被重置为0。

①方法一

       目前官方给予的一个解决方案:

       拖尾组件在添加到场景中的时候就会被激活,激活时的坐标是 00 点,因此 00 点就会做为拖尾的原点。这里只要把position 的赋值放到添加到父节点之前就行。

       旧版本没这个问题,是因为旧版本的拖尾总是延迟一帧。

②方法二

       可以使用以下办法:(一个在不修改源码情况下的解决方案

       在拖尾节点激活时,在执行lastUpdate之前,修改lastWpos为节点的世界坐标。

let motion = this.node.getComponent(cc.MotionStreak);
        if (motion) {

            //修复2.4.9版本拖尾效果从原点开始问题,后续关注引擎修复情况移除

            motion.scheduleOnce(() => {

                motion.reset();

                let mat4 = cc.mat4();

                let matrix = this.node.getWorldMatrix(mat4);

                let tx = matrix.m[12],

                    ty = matrix.m[13];

                //@ts-ignore

                motion._lastWPos.x = tx;

                //@ts-ignore

                motion._lastWPos.y = ty;

            });

        }

       代码块的实现过程为:延迟一帧开始执行,首先删除当前所有的拖尾片段,后将MotionStreak的lastWpos修改为节点的世界坐标。效果演示:

🆗总结

       CocosCreator更新到2.4.9后cc.MotionStreak被添加到场景时,总会马上创建一个(0,0)到拖尾所在节点位置的拖尾效果。拖尾组件在添加到场景中的时候就会被激活,激活时的坐标是 00 点,因此 00 点就会做为拖尾的原点。旧版本没这个问题,是因为旧版本的拖尾总是延迟一帧。解决办法就是在拖尾节点激活时,在执行lastUpdate之前,延时一帧修改lastWpos为节点的世界坐标。

  • 35
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 29
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肩匣与橘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值