查看原文
其他

Cocos 小秘书避坑指南大放送,一定有你想看的!

C姐 COCOS 2022-06-10

童话里的故事总是骗人的

现实中的 Bug 不仅免费还包邮


你是否经常被工作中的小麻烦

挡住了前进的脚步

因为一个小问题而纠结半天?


别再苦恼啦

Cocos 小秘书携无 Bug 符

帮你解决工作中的所有恼人小问题

让你轻轻松松高效开发


自 4 月 9 日 Cocos 小秘书推出后,已帮助大家解决了许多问题,成功用自身技术力量服务了大批开发者,广受好评。


我们决定将常见的 Bug 解决思路整理公开,希望能对更多的开发者有所帮助,在此也为背后引擎组童鞋们及时帮大家解决问题的敬业精神赞一赞~


以下是 Cocos 小秘书发出的避坑指南,进来白嫖~


    有没有办法获取 Prefab 引用的项目资源路径?我想用它来判断资源是不是属于项目公共资源。


目前引擎没有办法在运行时将 res 的包体资源相对路径转化为项目相对路径,我们提供两个方案可供参考喔。


1、通过 cc.loader.getDependsRecursively("resUrl") 获取打包后的资源引用路径。


然后再通过 cc.loader.getRes(url, cc.Asset) 获取加载的资源对象缓存,通过判断资源对象的其它属性来判断是否公共资源。


2、通过插件获取项目发布之后的资源路径,然后将该路径数据记录到游戏数据中。


插件参考

https://github.com/cocos-creator/demo-process-build-textures


    iOS 上按两下 HOME 键出现进程列表,再回到游戏声音就会丢失,请问怎么处理?


可以在 platforms/wechat/wrapper/unify.js 里加上以下代码。


javascriptutils.cloneMethod(globalAdapter, wx,'onAudioInterruptionEnd');utils.cloneMethod(globalAdapter, wx,'onAudioInterruptionBegin');


接着在 Game.js 里,添加以下代码即可喔。


javascript__globalAdapter.onAudioInterruptionEnd&&__globalAdapter.onAudioInterruptionEnd(onShown);__globalAdapter.onAudioInterruptionBegin&&__globalAdapter.onAudioInterruptionBegin(onHidden);


相关 pr 参考

https://github.com/cocos-creator-packages/adapters/pull/118


    cc.Graphics 这个组件填充时,能填充一张图片而不是单色吗?


Graphics 组件支持绘制 svg 矢量图形。


参考工程:

https://github.com/cocos-creator/raphael-example 


    自定义控件可以做全局吗?不然每个项目都要重新做一套,使用起来很麻烦。


可以将自定义控件做成 Prefab,然后从资源管理器中拖拽相应的预 Prefab 到编辑器的自定义控件分页,即可完成创建。


右键点击自定义控件中的元素,可以选择重命名、从控件库中删除该控件以及更换控件图标。


之后即可像使用内置控件一样,用拖拽的方式在场景中创建您自定义的控件了喔。


具体操作参考官方文档:

https://docs.cocos.com/creator/manual/zh/getting-started/basics/editor-panels/node-library.html


另外就是可以把资源放到内置资源文件夹中。


目录如下:

CocosCreator_2.2.2\resources\static\default-assets\prefab


    远程资源的合拼图资源怎么加载 png 和 plist?


参考如下代码:


const LoadRemotePlist = require("./LoadRemotePlist");
cc.Class({ extends: cc.Component,
properties: { },
start () { LoadRemotePlist("http://127.0.0.1:5500/assets/resources/emoji.plist",(err, plist)=>{ let spriteFrames = plist.getSpriteFrames(); }); },});


具体 LoadRemotePlist 脚本代码,参考 Demo : 

https://github.com/cocos-creator/load-remote-plist


    打包到微信端的小游戏,在安卓上运行的时候会有突然卡顿的现象,而在 iOS 上没有,使用 Cocos Creator 从 2.2.1~2.3.3 版本开发的小游戏都有。(游戏类型:IO )


1、针对游戏帧率:从 60 帧,定制修改成 30 帧,可以针对到一些低端的手机。


2、字体优化:尽量使用 bmfont 字体,不使用系统字体,开启 dynamicAtlas 功能,Label 的 CacheMode 选择为 BITMAP。


3、使用 nodepool,将所有的粒子、游戏中的玩家、还有一些经常出现的元素,全部提前创建好。


相关优化文章参考:

https://www.cocos.com/3493#3493


    .fbx 格式的模型在 2.2.2 版本不显示。


2.3.0 版本之前对 3D 模型的支持不够完善,从 2.3.0 版本开始,已支持一键创建 3D 场景必须的节点,包括缩放问题,建议使用 2.3.0 以后的版本进行开发。



    怎么让 Creator 支持 ts emitDecoratorMetadata 的参数?


首先 npm init 之后 npm i reflect-metadata --save


然后在 tsconfig.json 中


加入 "experimentalDecorators": true


参考链接:

https://www.jianshu.com/p/bf600274a004


    如何执行同步动作?


cc.tween 在链式执行时是按照 sequence 的方式来执行的,但是在编写复杂缓动的时候可能会需要同时并行执行多个队列,cc.tween 提供了 parallel 接口来满足这个需求。


jslet t = cc.tween;t(this.node) // 同时执行两个 cc.tween .parallel( t().to(1, { scale: 2 }), t().to(2, { position: cc.v2(100, 100) }) ) .call(() => { console.log('All tweens finished.') }) .start()


    游戏加入了几个粒子后,加载起来会特别卡。


经过 Demo 测试发现,加入的粒子里面使用内嵌的 Base64 图片数据,这类数据加载起来很慢,建议把图片数据提取为单独的图片,也就是 plist+png 的形式,而不是单独的 plist 粒子资源。


 


以上就是本次为大家整理的避坑指南

希望能对大家有所帮助喔


Cocos 小秘书的免费试用

截止 6 月 30 日就结束啦

没有参与内测的童鞋不要灰心喔

Cocos 小秘书正式版 7 月份将正式上线

全力助你高效工作、认真生活

敬请期待喔


近日热点:Cocos 有奖征文活动正在火热进行中,只要与游戏研发相关的内容都可以参与唷!快来分享你的开发经验和故事吧!点击【阅读原文】即可参加活动!

更多精彩


超18亿用户!SHAREit 平台发布游戏招募令Cocos Creator v2.3.4 正式接入腾讯云服务技术派 | 基于有向距离场(SDF)的地图碰撞系统Cocos Creator 2.4.0 Preview 现已推出UIWebView导致苹果审核被拒该怎么办?Cocos Creator 物理刚体挖洞新方案(上)Cocos Creator 物理刚体挖洞新方案(下)腾讯光子《最强魔斗士》策划分享篇
腾讯光子《最强魔斗士》技术分享
新书推荐|零基础入门小游戏开发Cocos 插件开发者的福音来了,余额提现秒到账Creator 3D 官方中文视频教程,附素材源码
如何在 Creator 中优雅地嵌套 Prefab?Analytics自定义事件功能详解,埋点分析利器原生 3D 游戏《弹无虚发》是如何炼成的?


“在看”是最大的鼓励▼

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存