【CocosCreator入门】CocosCreator组件

2023-11-06

        Cocos Creator 是一款流行的游戏开发引擎,具有丰富的组件和工具,其中Spine 是一个基于骨骼系统的 2D 动画工具,它可以让开发者通过对骨架和关键帧的调整来制作出更加自然、流畅的动画效果。Cocos Creator 支持使用 Spine 的 JSON 格式文件导入到项目中,并且提供了 Spine 组件来方便地加载和控制 Spine 动画。


目录

一、组件属性

二、组件方法

三、方法介绍

四、挂点生成


一、组件属性

属性 功能说明
Skeleton Data 骨骼信息数据,拖拽 Spine 导出后的骨骼资源到该属性中
Default Skin 选择默认的皮肤
Animation 当前播放的动画名称
Animation Cache Mode 渲染模式,默认 REALTIME 模式。(v2.0.9 中新增)
1. REALTIME 模式,实时运算,支持 Spine 所有的功能。
2. SHARED_CACHE 模式,将骨骼动画及贴图数据进行缓存并共享,相当于预烘焙骨骼动画。拥有较高性能,但不支持动作融合、动作叠加,只支持动作开始和结束事件。至于内存方面,当创建 N(N>=3) 个相同骨骼、相同动作的动画时,会呈现内存优势。N 值越大,优势越明显。综上 SHARED_CACHE 模式适用于场景动画,特效,副本怪物,NPC 等,能极大提高帧率和降低内存。
3. PRIVATE_CACHE 模式,与 SHARED_CACHE 类似,但不共享动画及贴图数据,且会占用额外的内存,仅存在性能优势,如果大量使用该模式播放动画可能会造成卡顿。当想利用缓存模式的高性能,但又存在换装的需求,因此不能共享贴图数据时,那么 PRIVATE_CACHE 就适合你。
Loop 是否循环播放当前动画
Premultiplied Alpha 图片是否启用贴图预乘,默认为 True。
当图片的透明区域出现色块时需要关闭该项,当图片的半透明区域颜色变黑时需要启用该项。
Time Scale 当前骨骼中所有动画的时间缩放率
Debug Slots 是否显示 slot 的 debug 信息
Debug Bones 是否显示骨骼的 debug 信息
Debug Mesh 是否显示 mesh 的 debug 信息
Use Tint 是否开启染色效果,默认关闭。
Enable Batch 是否开启动画合批,默认关闭。
开启时,能减少 Drawcall,适用于大量且简单动画同时播放的情况。
关闭时,Drawcall 会上升,但能减少 CPU 的运算负担,适用于复杂的动画。

二、组件方法

  1. setSkeletonData 设置底层运行时用到的 SkeletonData。
  2. setSlotsRange 设置骨骼插槽可视范围。
  3. setAnimationStateData 设置动画状态数据。
  4. setAnimationCacheMode 若想切换渲染模式,最好在设置'dragonAsset'之前,先设置好渲染模式,否则有运行时开销。
  5. isAnimationCached 当前是否处于缓存模式。
  6. setVertexEffectDelegate 设置顶点动画代理
  7. updateWorldTransform 当获取 bone 的数值未更新时,即可使用该函数进行更新数值。
  8. setToSetupPose 还原到起始动作
  9. setBonesToSetupPose 使用 SkeletonData 中的 BoneData 列表中的值。
  10. setSlotsToSetupPose 设置 slot 到起始动作。
  11. updateAnimationCache 更新某个动画缓存, 预计算动画中所有帧数据,由于在单帧计算所有数据,所以较消耗性能。
  12. invalidAnimationCache 使动画缓存失效,之后会在每帧重新计算。
  13. findBone 通过名称查找 bone。
  14. findSlot 通过名称查找 slot。
  15. setSkin 按名称查找皮肤,激活该皮肤。
  16. getAttachment 通过 slot 和 attachment 的名称获取 attachment。
  17. setAttachment 通过 slot 和 attachment 的名字来设置 attachment。
  18. getTextureAtlas Return the renderer of attachment.
  19. setMix 为所有关键帧设定混合及混合时间(从当前值开始差值)。
  20. setAnimation 设置当前动画。
  21. addAnimation 添加一个动画到动画队列尾部,还可以延迟指定的秒数。
  22. findAnimation 查找指定名称的动画
  23. getCurrent 通过 track 索引获取 TrackEntry。
  24. clearTracks 清除所有 track 的动画状态。
  25. clearTrack 清除出指定 track 的动画状态。
  26. setStartListener 用来设置开始播放动画的事件监听。
  27. setInterruptListener 用来设置动画被打断的事件监听。
  28. setEndListener 用来设置动画播放完后的事件监听。
  29. setDisposeListener 用来设置动画将被销毁的事件监听。
  30. setCompleteListener 用来设置动画播放一次循环结束后的事件监听。
  31. setEventListener 用来设置动画播放过程中帧事件的监听。
  32. setTrackStartListener 用来为指定的 TrackEntry 设置动画开始播放的事件监听。
  33. setTrackInterruptListener 用来为指定的 TrackEntry 设置动画被打断的事件监听。
  34. setTrackEndListener 用来为指定的 TrackEntry 设置动画播放结束的事件监听。
  35. setTrackDisposeListener 用来为指定的 TrackEntry 设置动画即将被销毁的事件监听。
  36. setTrackCompleteListener 用来为指定的 TrackEntry 设置动画一次循环播放结束的事件监听。
  37. setTrackEventListener 用来为指定的 TrackEntry 设置动画帧事件的监听。
  38. getState 获取动画状态
  39. getMaterial 根据指定索引获取材质
  40. getMaterials 获取所有材质。
  41. setMaterial 根据指定索引设置材质
  42. update 如果该组件启用,则每帧调用 update。
  43. lateUpdate 如果该组件启用,则每帧调用 LateUpdate。
  44. __preload __preload is called before every onLoad....
  45. onLoad 当附加到一个激活的节点上或者其节点第一次激活时候调用。
  46. start 如果该组件第一次启用,则在所有组件的 update 之前调用。
  47. onEnable 当该组件被启用,并且它的节点也激活时。
  48. onDisable 当该组件被禁用或节点变为无效时调用。
  49. onDestroy 该方法为生命周期方法,父类未必会有实现。
  50. onFocusInEditor
  51. onLostFocusInEditor
  52. resetInEditor 用来初始化组件或节点的一些属性,当该组件被第一次添加到节点上或用户点击了它的 Reset 菜单时调用。
  53. addComponent 向节点添加一个组件类,你还可以通过传入脚本的名称来添加组件。
  54. getComponent 获取节点上指定类型的组件,如果节点有附加指定类型的组件,则返回,如果没有则为空。
  55. getComponents 返回节点上指定类型的所有组件。
  56. getComponentInChildren 递归查找所有子节点中第一个匹配指定类型的组件。
  57. getComponentsInChildren 递归查找自身或所有子节点中指定类型的组件
  58. _getLocalBounds 以便编辑器的场景视图可以正确地执行点选测试。
  59. onRestore onRestore 是用户在检查器菜单点击 Reset 时,对此组件执行撤消操作后调用的。
  60. schedule 调度一个自定义的回调函数。
  61. scheduleOnce 调度一个只运行一次的回调函数,可以指定 0 让回调函数在下一帧立即执行或者在一定的延时之后执行。
  62. unschedule 取消调度一个自定义的回调函数。
  63. unscheduleAllCallbacks 取消调度所有已调度的回调函数:定制的回调函数以及 update 回调函数。
  64. destroy 销毁该对象,并释放所有它对其它对象的引用。
  65. _destruct 清除实例中的所有引用。
  66. _onPreDestroy 在对象被销毁之前调用。
  67. _serialize 为此对象定制序列化。
  68. _deserialize 从自定义序列化数据初始化此对象。

三、方法介绍

var s: sp.Skeleton;
s.setAnimation(0, "run", false);  //在track0播放动画"run",不循环
s.setSkin("01");  //替换皮肤
s.clearTrack(0);  //停止播放
s.addAnimation(0, 'attack', false, 0);//addAnimation方法可以在当前动画的基础上添加新的动画。它接受四个参数:轨道索引、动画名称、循环方式和延迟时间。
s.setMix('idle', 'attack', 0.2); //setMix方法用于设置两个动画之间的混合过渡时间。它有三个参数,分别是起始动画名称、目标动画名称和混合时间(以秒为单位)。


this.spine.setCompleteListener(function (trackEntry, loopCount) {
    console.log('Animation ' + trackEntry.animation.name + ' completed');
});
//setCompleteListener方法用于设置当动画播放完成时的回调函数。它接受一个参数,即回调函数。这段代码将在动画播放完毕时打印相应的日志信息。

四、挂点生成

        在使用骨骼动画时,经常需要在骨骼动画的某个部位上挂载节点,以实现节点与骨骼动画联动的效果。我们可以通过使用编辑器和脚本两种方式来实现 Spine 挂点,下面用一个范例来介绍 Spine 如何使用挂点将图片挂在龙的尾巴上,并随着龙的尾巴一起晃动。

1.首先在 层级管理器 中新建一个空节点并重命名。选中该节点然后在 属性检查器 中添加 Spine 组件,并将资源拖拽至 Spine 组件的 Skeleton Data 属性框中,设置好 Spine 组件属性。然后点击 Spine 组件下方的 生成挂点 按钮。

2.点击 生成挂点 按钮后,层级管理器 中 Spine 组件所在节点的下方,会以节点树的形式生成所有骨骼。

3.在 层级管理器 中选中目标骨骼节点(龙的尾巴)作为父节点,创建一个 Sprite 节点为子节点。

即可看到在 场景编辑器 中龙的尾巴上已经挂了一个 Sprite。

4.保存场景,点击编辑器上方的预览按钮,即可看到图片挂在龙的尾巴上,并随着龙的尾巴一起晃动。 

        注:Spine 挂点完成后,即可删除 层级管理器 中无用的骨骼节点,以减少运行时的计算开销。注意目标骨骼节点的父节点都不可删。

脚本实现挂点

1.跟通过编辑器实现的步骤类似,首先先创建一个挂有 Spine 组件的节点,并设置好 Spine 组件的属性。

2.创建要挂载到骨骼动画上的图片预制资源。

3.在资源管理器中新建一个 JavaScript 脚本,编写组件脚本。脚本代码如下:

 cc.Class({
     extends: cc.Component,

     properties: {
         skeleton: {
             type: sp.Skeleton,
             default: null,
         },
         // 将要添加到骨骼动画上的预制体
         targetPrefab: {
             type: cc.Prefab,
             default: null,
         },
         // 目标骨骼名称
         boneName: "",
     },

     onLoad () {
         this.generateSomeNodes();
     },

     generateAllNodes () {
         // 取得挂点工具
         let attachUtil = this.skeleton.attachUtil;
         attachUtil.generateAllAttachedNodes();
         // 因为同名骨骼可能不止一个,所以需要返回数组
         let boneNodes = attachUtil.getAttachedNodes(this.boneName);
         // 取第一个骨骼作为挂点
         let boneNode = boneNodes[0];
         boneNode.addChild(cc.instantiate(this.targetPrefab));
     },

     destroyAllNodes () {
         let attachUtil = this.skeleton.attachUtil;
         attachUtil.destroyAllAttachedNodes();
     },

     // 生成指定骨骼名称节点树的方法
     generateSomeNodes () {
         let attachUtil = this.skeleton.attachUtil;
         let boneNodes = attachUtil.generateAttachedNodes(this.boneName);
         let boneNode = boneNodes[0];
         boneNode.addChild(cc.instantiate(this.targetPrefab));
     },

     // 销毁指定骨骼名称节点的方法
     destroySomeNodes () {
         let attachUtil = this.skeleton.attachUtil;
         attachUtil.destroyAttachedNodes(this.boneName);
     }
 });

4.将脚本挂载到 Canvas 节点或者其他节点上,即将脚本拖拽到节点的属性检查器中。然后再将对应的节点或者资源拖拽到脚本组件的属性框中,并保存场景。

        若不知道目标骨骼的名称,可点击 Spine 组件中的 生成挂点 按钮,然后在层级管理器中 Spine 节点下生成的骨骼节点树中查找。查找完成后再删除 Spine 节点下的骨骼节点树即可。


        总之,Spine组件是CocosCreator游戏引擎中非常重要和实用的组件之一,其核心思想是将绘制元素分解为多个部位,并通过骨骼节点进行关联和控制。这种方式可以让动画更加灵活和高效,同时也降低了资源的消耗。帮助开发者轻松加载和控制Spine动画资源,为游戏增添更多的精彩动画效果。

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

【CocosCreator入门】CocosCreator组件 的相关文章

  • 【基于Cocos Creator实现的赛车游戏】9.实现汽车节点的控制逻辑

    转载知识星球 深度连接铁杆粉丝 运营高品质社群 知识变现的工具 项目地址 赛车小游戏 基于Cocos Creator 3 5版本实现 课程的源码 基于Cocos Creator 3 5版本实现 在上一节的课程中 您已经实现了通过触控给刚体施
  • 【Unity3d】Animator和Animation组件使用注意事项

    一 Animator一般用于人物动画控制 特点是动画是持续的 可能有动作切换 Animation一般用于间断性的动画的控制 比如一个场景特效的播放 只播放一次就完了 二 实测Animation速度比Animator快10 左右 内存占用没测
  • Unreal Engine4蓝图编程学习(一)

    学习内容主要介绍了蓝图进行对象交互 升级玩家技能 升级AI敌人 跟踪游戏状态完成游戏体验等内容 内容来源于 Unreal Engine4蓝图可视化编程 书籍为2017年 与现在版本有一定区别 一 制作移动标靶 1 1 首先 我们想先创建一个
  • unity实现相机位置移动

    在unity场景中经常有通过键盘中W S A D Q E等按键控制相机移动的需求 相机位置更新 控制代码如下 private void Update if active return Translation if enableTransla
  • PicoNeo3开发VR——小白教程

    不断更新中 欢迎大佬们来指导 纠错 导入PicoVRSDK 1 新创一个Unity工程 Unity版本最好选择2019 4以上版本 以及需配置好安卓环境 然后导入官方picoVRSDK 2 渲染设置 Graphics APIs暂不支持Vul
  • UE4 射线检测案例(C++)

    UE4 射线检测 C 开发场景 玩家 C 开发的 武器 C 射线检测函数 蓝图 C 效果 制作流程 添加开火按键映射 新建一个继承ACharacter的C 用蓝图继承刚刚新建的C 然后设置好游戏模式 我 这是是 用了一个枚举 其实你直接调用
  • Unity卡死情况

    今天遇到了Unity点击播放后卡死 用任务管理器强行关闭后重开 打不开项目的情况 解决方案 检查USB接口设备 有些设备可能会影响Unity工程启动 比如VR头盔
  • unity 使用vrtk4的插件 打包htv vive VR客户端包,手柄不生效

    背景 目的 u3d使用vrtk开发pico应用 vrtk是为了到时候无缝衔接后续要买的htc vive pro 2 先导入了tilia importer 也就是vrtk4 0 根据教程模块化使用功能 和pico官网下的 PICO Unity
  • 【Unity2d】带你制作一款类似于金山打字的小游戏

    博主大概08年开始接触电脑游戏 当时玩的是我哥的电脑 那时候家里没网 只可以玩电脑上自带的单机游戏 比如扫雷 蜘蛛纸牌等等 当然还有红色警戒 冰封王座 星际争霸 帝国崛起等等 这些大概是我哥当时在大学下载的 也是那个时候对游戏充满了兴趣 记
  • ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course

    ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial UE5 Starter Course 教程大小解压后 4 96G 语言 英语 中英文字幕 机译 时长 4小时56分 1920X1080 mp4 虚
  • cocos 基础动作加上简单特效

    使用文理缓存创建精灵 cc Director getInstance getTextureCache addImage WechatIMG3 png localsp cc Sprite createWithTexture cc Direct
  • Unity WebGL错误集锦

    ips 0 Unity的PlayerSettings的otherSettings或者Publish Settings里面的Enable Exceptions里面选择Full StackTrace 可以在打出的包中的浏览器的webgl打印出错
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • Unity动画控制器animator.CrossFade

    需要特别注意 1 CrossFade虽然可以不用任何逻辑来链接而直接跳转 但是CrossFade只能覆盖其他动画 当当前动画播放完毕而没有跳出这个动画时再次调用CrossFade将会失败 造成动画依旧停在原位 参数animator Cros
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • Unity学习笔记(一)—— 基础知识

    一 基础知识 1 开发团队组成 2 unity特点 图形界面 所见即所得 入门简单 支持C 比OC C 更友好 js 国内外资源丰富 因为使用的人多 跨平台性好 PC端 移动端等 对VR AR的支持最完善 3 成功案例 游戏 炉石传说 神庙
  • mixamo根动画导入UE5问题:滑铲

    最近想做一个跑酷游戏 从mixamo下载滑铲动作后 出了很多动画的问题 花了两周时间 终于是把所有的问题基本上都解决了 常见问题 1 动画序列 人物不移动 2 动画序列 人物移动朝向错误 3 蒙太奇 人物移动后会被拉回 4 蒙太奇 动画移动
  • 【Unity】如何让Unity程序一打开就运行命令行命令

    背景 Unity程序有时依赖于某些服务去实现一些功能 此时可能需要类似打开程序就自动运行Windows命令行命令的功能 方法 using UnityEngine using System Diagnostics using System T
  • 【转载】【Unity】WebSocket通信

    1 前言 Unity客户端常用的与服务器通信的方式有socket http webSocket 本文主要实现一个简单的WebSocket通信案例 包含客户端 服务器 实现了两端的通信以及客户端向服务器发送关闭连接请求的功能 实现上没有使用U
  • 游戏策划:游戏开发中的关键环节

    在数字游戏的世界里 游戏策划是构建一个成功游戏的基石 游戏策划不仅仅是一个创意过程 它涉及从故事构建到技术实现的各个方面 以下是游戏策划中需要重点关注的几个重要内容 1 故事情节与世界观构建 一款游戏的魅力很大程度上取决于其故事情节和世界观

随机推荐

  • 数据中台-让数据用起来-5

    文章目录 第五章 数据汇聚联通 打破企业数据孤岛 5 1 数据采集 汇聚的方法和工具 1 线上行为采集 2 线下行为采集 3 互联网数据采集 4 内部数据汇聚 5 2 数据交换产品 1 数据源管理 2 离线数据交换 3 实时数据交换 5 3
  • 樱花树代码html,樱花树代码

    import turtle as T import random import time 画樱花的躯干 60 t def Tree branch t time sleep 0 0005 if branch gt 3 if 8 lt bran
  • 深度学习 (一)计算机如何处理和识别图片揭秘

    前言 先来一张美景图 欣赏一下大自然 顺便大家猜猜这是哪里 有时候真感叹大自然的雄伟壮阔 自然形成了无数的山和风景不需要任何点缀 有时候在想为什么亲近自然界我们会有亲近的感觉 可能那是我们的来源 我们人类在经过了无数代的繁衍生息 发展到了现
  • ARM 常用汇编语法

    ARM 常用汇编语法 如果使用过 STM32 的话就会知道 MDK 和 IAR 下的启动文件 startup stm32f10x hd s其中的汇编语法是有所不同的 将 MDK 下的汇编文件直接复制到 IAR 下去编译就会出错 因为 MDK
  • 递归实现栈的翻转

    递归实现栈的翻转 主要考察对于递归的理解 其实这个问题最简单的方法当然是设计一个空的栈来存储这些元素 一次达成逆序 但是题目要求使用递归的方式实现逆序 因此需要借助函数返回栈来充当这个这个栈的作用 实际上依然是借助了一个栈 但是这个栈是函数
  • 如何破解Win7之开机密码

    声明 本次实验是利用5次Shift来破解Win7密码 如果Win7 Win10已经修补此漏洞则不要继续尝试 1 VMware安装好1台Win7操作系 2 将设备开机后 连续摁键盘Shift会弹出如下提示框 则表示该计算机有漏洞 直接X掉就好
  • Android TTS语音播报实践

    在工作中遇到了语音播报的需求 在收到push后 用语音播报push携带的播报内容 类似于微信支付宝的收款信息一样 调研后主要的语音播报方案有一下几种 基于第三方的TTS SDK 如百度 思必驰 讯飞等 自研Native的TTS引擎 模型 基
  • JavaScript 使用原生js和jquery两种方法,实现tab栏切换

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 一 使用原生js实现tab栏切换 代码如下 具体注释已经在代码中给出
  • 下载好python后,怎么打开,python怎么进入编程界面

    大家好 给大家分享一下python下载安装好后怎么打开 很多人还不知道这一点 下面详细解释一下 现在让我们来看看 1 python第一次怎么打开 python第一次打开方法如下 win r快捷键打开运行窗口 在运行窗口输入栏中输入cmd后回
  • 调用百度云API实现语音识别

    一 在云平台创建语音技术应用 1 点击百度AI平台短语音识别https ai baidu com tech speech asr 登录百度云账号 2 新用户注册完百度智能云平台后 需要在 语音技术 概览 页面领取语音识别的免费额度 否则后续
  • 单片机串口发送16进制、ASCII

    单片机串口发送16进制 ASCII 单片机的串口是 你给的是什么格式他就发送什么格式 在使用串口助手接收到时候也会出现 用什么显示的选项 1 如果你串口发送的是16进制数 可以直接把16进制数放到数组里面进行发送 也可以用sprintf函数
  • js和jQuery知识点总结

    目录 一 jQuery知识点梳理 1 jQuery入门 选择器 案例1 表格隔行换色 二 工具方法 属性 CSS 案例2 实现全选功能 三 筛选 过滤 位置 案例3 实现返回顶部功能 四 事件 效果 二 JavaScript知识点梳理 一
  • 30天自制操作系统 day2 32位处理器的几个寄存器 换种方式制作磁盘镜像 makefile

    32位处理器的几个寄存器 制作磁盘镜像工具 用的是它自己写的工具 叫edimg 使用方式如下 edimg imgin z tools fdimg0at tek wbinimg src ipl bin len 512 from 0 to 0
  • 转:【Python3网络爬虫开发实战】 requests基本用法

    1 准备工作 在开始之前 请确保已经正确安装好了requests库 如果没有安装 可以参考1 2 1节安装 2 实例引入 urllib库中的urlopen 方法实际上是以GET方式请求网页 而requests中相应的方法就是get 方法 是
  • 解决Win7&Win8 64位下Source Insight提示未完整安装的问题

    网上的破解版的注册表文件都是针对32位系统的 所以在64位系统里运行根本无法破解 下面分别贴出这俩系统里的破解文件 使用方法 分别复制对应系统的内容 新建文本文档 将内容粘贴进去 重命名为 reg文件 双击运行 弹出提示窗口 点击 确定 整
  • DolphinScheduler3.1.4安装部署

    1 使用Xshell工具上传dolphinscheduler 3 1 4 bin tar gz到 opt software目录下 2 在 opt software目录下使用tar命令解压到 opt module目录下 tar zxvf ap
  • 事务是什么???

    一 什么是事务 事务是一系列的操作 这些操作要么全部成功 要么全部失败 如果说其中一个操作失败 就是已经成功执行的操作都会发生回滚 仿佛什么都没发生过一样 二 事务的四大特性 ACID 原子性 事务是不可分割的 事务的操作要么全部事务 要么
  • windows powershell激活anaconda虚拟环境

    在windows powershell中激活anaconda虚拟环境 一 以管理员身份运行windows powershell 二 输入 Set ExecutionPolicy RemoteSigned 三 激活虚拟环境 activate
  • Leetcode面试题 17.08. 马戏团人塔——最长递增子序列问题

    文章目录 引入 马戏团人塔问题分析 最长递增子序列问题 LIS 解法 方法一 动态规划 方法二 贪心 二分查找 马戏团人塔问题解法 堆箱子问题解法 引入 今天做到面经的17 08 马戏团人塔 和面试题 08 13 堆箱子问题 两个题目很相似
  • 【CocosCreator入门】CocosCreator组件

    Cocos Creator 是一款流行的游戏开发引擎 具有丰富的组件和工具 其中Spine 是一个基于骨骼系统的 2D 动画工具 它可以让开发者通过对骨架和关键帧的调整来制作出更加自然 流畅的动画效果 Cocos Creator 支持使用