[编程开发] Cocos Creator的现状如何?

[复制链接]
sasa516 发表于 2023-10-3 19:33:17|来自:中国 | 显示全部楼层 |阅读模式
离Cocos Creator第一个正式版本发布已经半年多,Cocos Creator的现状如何了?相对于cocos2d-x市场份额下降了多少?会不会又被触控砍掉?希望能从市场份额,产品质量,前景等方面进行介绍。
全部回复5 显示全部楼层
疯狂下载君 发表于 2023-10-3 19:34:06|来自:中国 | 显示全部楼层
Cocos Creator 是一款非常优秀的游戏开发引擎,它提供了丰富的功能和便捷的开发体验,但是在使用过程中,有时候会遇到内存占用过高的问题,这不仅会影响游戏的性能和稳定性,还可能导致游戏崩溃。因此,如何进行内存优化是每个游戏开发者都需要掌握的技能。本文将详细介绍 Cocos Creator 内存优化的技巧,并给出原理的讲解和示例代码。
对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

  • 对象池技术
对象池技术是一种常见的内存优化技巧,它可以有效地减少对象的创建和销毁次数,从而降低内存占用。在 Cocos Creator 中,我们可以使用 cc.NodePool 类来实现对象池功能。具体的实现方法如下:
首先,定义一个对象池:
  1. let nodePool = new cc.NodePool();
复制代码
然后,创建一个节点并将其添加到对象池中:
  1. let node = cc.instantiate(prefab);
  2. nodePool.put(node);
复制代码
最后,从对象池中取出节点并进行使用:
  1. let node = null;
  2. if (nodePool.size() > 0) {
  3.     node = nodePool.get();
  4. } else {
  5.     node = cc.instantiate(prefab);
  6. }
复制代码
这样,我们就可以重复使用同一个节点,避免频繁地创建和销毁对象,从而达到内存优化的目的。

  • 引用计数技术
引用计数技术是一种常见的内存管理技巧,它通过记录对象的引用次数来判断对象是否可以被释放。在 Cocos Creator 中,我们可以使用 cc.loader.releaseRes 方法来释放资源,并使用 cc.loader.getDependsRecursively 方法来获取资源的依赖关系。具体的实现方法如下:
首先,加载资源并记录其引用次数:
  1. let node = null;
  2. if (nodePool.size() > 0) {
  3.     node = nodePool.get();
  4. } else {
  5.     node = cc.instantiate(prefab);
  6. }
复制代码
然后,获取资源的依赖关系并记录其引用次数:
  1. let deps = cc.loader.getDependsRecursively("prefab/prefab1");
  2. for (let i = 0; i < deps.length; i++) {
  3.     cc.loader.addPersistRootNode(deps[i]);
  4.     cc.loader.setAutoRelease(deps[i], false);
  5. }
复制代码
最后,当资源不再被使用时,释放资源和其依赖关系:
  1. cc.loader.releaseRes("prefab/prefab1");
  2. let deps = cc.loader.getDependsRecursively("prefab/prefab1");
  3. for (let i = 0; i < deps.length; i++) {
  4.     cc.loader.removePersistRootNode(deps[i]);
  5.     cc.loader.release(deps[i]);
  6. }
复制代码
这样,我们就可以通过引用计数技术来管理资源的内存占用,避免资源的重复加载和占用过高的问题。

  • 清理无用的节点和组件
在游戏开发过程中,我们有时候会创建大量的节点和组件,但是其中有些节点和组件可能已经不再被使用,却仍然占用着内存资源。因此,我们需要定期清理无用的节点和组件。在 Cocos Creator 中,我们可以使用 cc.sys.garbageCollect 方法来执行垃圾回收,从而清理无用的节点和组件。具体的实现方法如下:
  1. cc.sys.garbageCollect();
复制代码
这样,我们就可以定期清理无用的节点和组件,减少内存占用,提高游戏的性能和稳定性。

  • 避免频繁的字符串拼接和数组操作
在游戏开发过程中,我们会遇到大量的字符串拼接和数组操作,但是这些操作会占用大量的内存资源。因此,我们需要避免频繁的字符串拼接和数组操作,从而降低内存占用。在 Cocos Creator 中,我们可以使用模板字符串来替代字符串拼接,使用对象池来替代数组操作。具体的实现方法如下:
首先,使用模板字符串来替代字符串拼接:
  1. let str = `Hello, ${name}!`;
复制代码
然后,使用对象池来替代数组操作:
  1. let arrayPool = new cc.NodePool();
  2. let array = [];
  3. for (let i = 0; i < 10; i++) {
  4.     let node = arrayPool.get();
  5.     if (!node) {
  6.         node = new cc.Node();
  7.     }
  8.     array.push(node);
  9. }
  10. for (let i = 0; i < array.length; i++) {
  11.     arrayPool.put(array[i]);
  12. }
  13. array.length = 0;
复制代码
这样,我们就可以避免频繁的字符串拼接和数组操作,从而降低内存占用。
总结
Cocos Creator 内存优化是游戏开发中非常重要的一部分,它可以帮助我们提高游戏的性能和稳定性,避免游戏崩溃和卡顿的问题。本文介绍了对象池技术、引用计数技术、清理无用的节点和组件、避免频繁的字符串拼接和数组操作等内存优化技巧,并给出了详细的实现方法和示例代码。希望本文对大家能够有所帮助,让大家的游戏开发更加顺利和高效。
RD1223 发表于 2023-10-3 19:34:14|来自:中国 | 显示全部楼层
Cocos Creator已经成为了国内最好的引擎生态+社区。现在大的国际政治环境不太平,支持国产游戏引擎也是很重要的一点。同时web3.0是趋势,Cocos Creator采用TypeScript开发在web端会有很大的优势。
目前Cocos Creator做2D游戏技术非常成熟,市场份额也比较大,做3D中小型游戏技术很成熟,大型的渲染效果还在加强中,最近Cocos Creator又融了资金,可以做更大的计划。
yufan163 发表于 2023-10-3 19:35:05|来自:中国 | 显示全部楼层
时至今日,手游公司剩下不多了。剩下的小公司苟延残喘, 不是换皮就是做棋牌。
换皮肯定还用老的cocos2d-x。棋牌,据我所知用cc的几乎没有,还是用cocos2d-x+cocosstudio比较多。
<hr/>更新一下评论。。。目前用cc做棋牌非常多了,几乎cc是棋牌专用引擎。。。
tianyahaig2000 发表于 2023-10-3 19:35:49|来自:中国 | 显示全部楼层
用了4年多cocos,一直被cocosbuilder和cocostudio坑, 一直看不好cocos creator, 但是前几天闲着折腾了下cocoscretor, 我不吐槽编译器了, 只求这款bug能少点,很看好js的未来。
0318dj 发表于 2023-10-3 19:36:10|来自:中国 | 显示全部楼层
Cocos Creator只发布了半年,而且在没有开发者人口红利的情况下,Creator活跃开发者数量已经和上线推广了4年的Cocos Studio相当。
而且我很自信的一点是,当Studio用户在开新游戏项目的时候,会逐步迁移到Creator上面来,为了照顾这些老用户,Creator的Lua插件已经快发布第二个版本了,C++支持的插件也正在开发中,并且支持了从Studio工程导入转化为Creator工程的功能。
我觉得最好的事情莫过于,Cocos Creator的市场口碑很好,基本上只有谈论bug的,没有人说『这个编辑器很垃圾』,所以终结了『一看到市面上有新的编辑器,我们就很紧张』的状态。这正是我、是触控希望看到的结果。

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则