微信小游戏开发之Cocos Creator插件脚本的用法和使用场
主题
Cocos Creator插件脚本的用法和使用场景,以及碰到的问题解决
特别说明
CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文档中有些知识点的补充和分析。
正文
在开发Cocos Creator微信小游戏的过程中,我们可能会碰到需要在项目中全局都通用的组件,比如Toast、弹窗等等,我们要怎么优雅的去实现它们呢?
我在之前文章《微信小游戏开发之面向对象编程和模块化》中,写了脚本模块化的思路和用法,假设现在我们要实现在每个场景中都能随时Show Toast的功能,第一时间想到的是在每个场景上都添加一个Toast节点,然后show text,一定时间后再自动隐藏。
没错,思路是这样的,动态的添加Toast节点到场景中,并将Toast的功能封装成独立的脚本,在需要使用Toast的场景中require脚本,调用对应的show方法就能出现Toast了。
不过Cocos Creator还提供了在编辑器的属性检查器上将普通脚本导入为插件的设置选项。
导入为插件插件脚本和普通脚本的差异
- 不能声明组件
- 不能require普通脚本
- 发布后,脚本内不在任何函数内声明的局部变量都会暴露成全局变量。编辑器下则和普通脚本相同。(在微信、百度、小米、支付宝、字节跳动小游戏上,局部变量不会被暴露成全局变量。如果想实现同样的效果,需要将局部变量用
window.Toast = {}
方式定义) - 插件脚本加载在普通脚本之前(多个插件脚本按项目中的路径字母顺序依次加载)
注意事项
-
插件包含多个脚本时,则需要把插件用到的所有脚本合并为单个的 js 文件,比如
Async.js
-
插件依赖于其它插件,也需要把多个插件合并为单个 js 文件,比如
protobuf.js
-
不支持插件主动加载其它脚本,比如
lzma.js
插件脚本的使用
因为插件脚本中声明的变量是全局变量,所以在普通脚本中可以直接使用变量名.方法
形式来使用插件内容,例如:
Toast.showText('该功能还在开发中', Toast.LENGTH_LONG);
遇到的问题
在使用Toast插件时,在CocosCreator编辑器上运行没有问题,但是构建后到微信开发者工具上运行,一直提示readFile:fail permission denied
,找了半天才发现是因为加载了引擎内置资源internal目录下的资源导致的
cc.loader.load({
'uuid': 'b43ff3c2-02bb-4874-81f7-f2dea6970f18'
}, function (error, result) {
...
})
查了各方资料,还是没有找到怎么动态加载引擎内置资源的方法,有知道的朋友,麻烦告知一下,谢谢!
资源uuid的获取方式如下图:
结尾
既然您看到这了,说明文章对你还有吸引力,帮忙点个赞再走吧,谢谢!
关注我的公众号「掉队程序员」,持续输出更多内容!
自己动手写,分解项目中的各个模块需求,通过查文档和搜索Cocos社区,解决碰到的问题,最终在微信上线了下面这款微信小游戏《成语锦衣卫》,欢迎大家扫码体验,并作为参考项目模版,开发出属于自己的小游戏
欢迎大家扫码体验
预告
下一节和朋友们说一说:场景切换巨慢的原因分析和解决,以及scheduleOnce的延迟加载