插件脚本

    资源管理器 中选中任意一个脚本,就能在 属性检查器 中看到这样一个设置界面,我们可以在这里设置脚本是否“导入为插件”。

    • 对第三方插件,或者底层插件,就有可能需要选中选项,这样的脚本简称插件脚本

    这个选项只和脚本有关,具体影响有几个方面,初学者简单了解即可:

    脚本加载顺序如下:

    1. Cocos2d 引擎
    2. 插件脚本(有多个的话按项目中的路径字母顺序依次加载)
    3. 普通脚本(打包后只有一个文件,内部按 require 的依赖顺序依次初始化)
    • 依赖 DOM API 的插件将无法发布到原生平台

      网页中可以使用大量的前端插件,例如 jQuery,不过它们有可能依赖于浏览器的 DOM API。依赖这些 API 的插件不能用于原生平台中。
    • 如果插件包含了多个脚本,则需要把插件用到的所有脚本合并为单个的 js 文件

      以 Async()为例,这个库包含了非常多的零散的源文件,如果把所有源文件都放到项目里,则每个源文件都要设置一次“导入为插件”,并且 Creator 无法保证这些源文件之间的加载顺序,很容易报错。所以我们要找到插件作者提供的预编译好的单个脚本,例如 async.js 或 async.min.js,这样的文件可以直接用浏览器加载运行,不需要做额外的编译操作,一般可以直接放入 Creator 中使用。如果插件作者没提供打包好的版本,通常也会在文档中说明如何编译出浏览器可执行的脚本,照着操作就行。

    • 如果插件还依赖于其它插件,也需要把多个插件合并为单个 js 文件

      protobuf.js 为例,这个库还依赖于 ,但是插件作者并没有提供整合好的独立运行版本。我们可以先下载到这两个库各自编译后的两个文件 protobuf.js 和 ,然后使用文本编辑器或类似 这样的命令行工具将这两个脚本拼合成一个新的脚本 protobuf_all.js。然后就能在 Creator 中直接使用这个 protobuf_all.js 了。

    • 不支持插件主动加载其它脚本

      lzma 插件为例,这个插件默认提供的 lzma.js 脚本会通过浏览器的 Worker 加载另一个工作者脚本,目前 Creator 不支持这样的额外加载。解决方式是 。其它像是内部采用 自行加载依赖项的插件,也需要做类似处理才能导入 Creator。

    由于所有插件脚本都保证了会在普通脚本之前加载,那么除了用来加载插件,你还可以利用这个特性声明一些特殊的全局变量。你可以在项目中添加这样一个脚本,并且设置“导入为插件”:

    在这个案例中,由于 network.jsnetwork_debugger.js 等脚本加载时就已经用到了 的变量。如果 globals.js 不是插件脚本,则每个可能用到那些全局变量的脚本都要在最上面声明 require("globals");,才能保证 先加载。

    但假如一个全局变量本身就是要在组件 onLoad 时才能初始化,那么建议直接在普通脚本的 onLoad 里直接使用 window.foo = bar 来声明全局变量,不需要使用插件脚本,详见 通过全局变量访问

    请注意:游戏脱离编辑器运行时,插件脚本将直接运行在全局作用域,脚本内不在任何函数内的局部变量都会暴露成全局变量,请小心因此引发的全局变量污染。


    继续前往 或者返回 脚本开发