插件脚本
在 资源管理器 中选中任意一个脚本,就能在 属性检查器 中看到这样一个设置界面,我们可以在这里设置脚本是否 “导入为插件”。
- 对第三方插件,或者底层插件,就有可能需要选中选项,这样的脚本简称 插件脚本。
这个选项只和脚本有关,具体影响有几个方面,一般简单了解即可:
勾选“导入为插件”后,还能够进一步在 属性检查器 设置这个插件脚本什么时候才会生效:
选项 | 影响平台 | 备注 |
---|---|---|
允许 Web 平台加载 | 浏览器、网页预览、编辑器 | 默认启用,禁用时会连带“允许编辑器加载”一起禁用 |
允许编辑器加载 | 编辑器 | 默认禁用,如果编辑器中的其它普通脚本加载过程中会依赖当前脚本,则需要手动开启这个选项。开启后,脚本内不在任何函数内声明的局部变量不会暴露成全局变量,所以全局变量需要用 的方式定义才能生效。 |
允许 Native 平台加载 | 原生平台、模拟器预览 | 默认启用 |
脚本加载顺序如下:
- Cocos2d 引擎
- 插件脚本(有多个的话按项目中的路径字母顺序依次加载)
- 普通脚本(打包后只有一个文件,内部按 require 的依赖顺序依次初始化)
- 依赖 DOM API 的插件将无法发布到原生平台网页中可以使用大量的前端插件,例如 jQuery,不过它们有可能依赖于浏览器的 DOM API。依赖这些 API 的插件不能用于原生平台中。
如果插件包含了多个脚本,则需要把插件用到的所有脚本合并为单个的 js 文件以 Async(https://github.com/caolan/async)为例,这个库包含了非常多的零散的源文件,如果把所有源文件都放到项目里,则每个源文件都要设置一次“导入为插件”,并且 Creator 无法保证这些源文件之间的加载顺序,很容易报错。所以我们要找到插件作者提供的预编译好的单个脚本,例如 async.js 或 async.min.js,这样的文件可以直接用浏览器加载运行,不需要做额外的编译操作,一般可以直接放入 Creator 中使用。如果插件作者没提供打包好的版本,通常也会在文档中说明如何编译出浏览器可执行的脚本,照着操作就行。
如果插件还依赖于其它插件,也需要把多个插件合并为单个 js 文件以 为例,这个库还依赖于 bytebuffer.js,但是插件作者并没有提供整合好的独立运行版本。我们可以先下载到这两个库各自编译后的两个文件 和 bytebuffer.js,然后使用文本编辑器或类似
cat
这样的命令行工具将这两个脚本拼合成一个新的脚本 protobuf_all.js。然后就能在 Creator 中直接使用这个 protobuf_all.js 了。不支持插件主动加载其它脚本以 为例,这个插件默认提供的
lzma.js
脚本会通过浏览器的 Worker 加载另一个工作者脚本,目前 Creator 不支持这样的额外加载。解决方式是 单独使用lzma_worker.js
就好。其它像是内部采用 自行加载依赖项的插件,也需要做类似处理才能导入 Creator。
接下来你就能在任意的 普通 脚本中直接使用它们,像是在声明类型的同时使用 DEFAULT_IP
等全局变量:
在这个案例中,由于 network.js
和 network_debugger.js
等脚本加载时就已经用到了 的变量。如果 globals.js
不是插件脚本,则每个可能用到那些全局变量的脚本都要在最上面声明 require("globals");
,才能保证 globals.js
先加载。
但假如一个全局变量本身就是要在组件 onLoad 时才能初始化,那么建议直接在普通脚本的 onLoad 里直接使用 来声明全局变量,不需要使用插件脚本,详见 。
继续前往 JavaScript 快速入门 或者返回 。