加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos Creator 插件脚本(摘自官方文档)

发布时间:2020-12-14 17:09:39 所属栏目:百科 来源:网络整理
导读:插件脚本 在 资源管理器 中选中任意一个脚本,就能在 属性检查器 中看到这样一个设置界面,我们可以在这里设置脚本是否“导入为插件”。导入为插件是一个不太常用到的选项,初学者简单了解即可。 对组件脚本,数据逻辑而言,一般默认都取消这个选项,这样的

插件脚本

资源管理器中选中任意一个脚本,就能在属性检查器中看到这样一个设置界面,我们可以在这里设置脚本是否“导入为插件”。导入为插件是一个不太常用到的选项,初学者简单了解即可。

  • 对组件脚本,数据逻辑而言,一般默认都取消这个选项,这样的脚本简称普通脚本
  • 对第三方插件,或者底层插件,就有可能需要选中选项,这样的脚本简称插件脚本

这个选项只和脚本有关,具体影响有几个方面:

变量作用域use strict脚本导入编辑器时项目构建阶段时SourceMap
类型: 普通脚本 插件脚本
声明组件 支持 不支持
模块化 支持,可以通过require引用其它普通脚本,不能 require 插件脚本 不提供,也不能 require 普通脚本
每个脚本内定义的局部变量不会暴露到全局 脚本内不在任何函数内的局部变量都会暴露成全局变量
强制开启,未定义的变量不能赋值 需要手动声明,否则未定义的变量一旦赋值就会变成全局变量
脚本中的 ES2015 特性会先转译,再进入统一的模块化解析 不做任何处理
所有普通脚本都会打包成单个脚本文件,非“调试模式”下还会压缩 不进行打包,非“调试模式”下会被压缩
不支持

脚本加载顺序

脚本加载顺序如下:

  1. Cocos2d 引擎
  2. 插件脚本(有多个的话按项目中的路径字母顺序依次加载)
  3. 普通脚本(打包后只有一个文件,内部按 require 的依赖顺序依次初始化)

目标平台兼容性

插件发布后将直接被目标平台加载,所以请检查插件的目标平台兼容性,否则项目发布后插件有可能不能运行。

  • 目标平台不提供原生 node.js 支持:例如很多npm模块都直接或间接依赖于 node.js,这样的话发布到原生或网页平台后是不能用的。
  • 依赖 DOM API 的插件将无法发布到原生平台:网页中可以使用大量的前端插件,例如 jQuery,不过它们有可能依赖于浏览器的 DOM API。依赖这些 API 的插件不能用于原生平台中。

全局变量

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

/* globals.js */

// 定义新建组件的默认值
var DEFAULT_IP = "192.168.1.1";

// 定义组件开关
var ENABLE_NET_DEBUGGER = true;

// 定义引擎 API 缩写(仅适用于构造函数)
var V2 = cc.Vec2;

在上面的插件脚本中,因为作用域是在全局,并不是在脚本内部,所以直接写var DEFAULT_IP = ...就能声明全局变量。
接下来你就能在任意的普通脚本中直接访问它们:

/* network.js */

cc.Class({
    extends: cc.Component,properties: {
        ip: {
            default: DEFAULT_IP
        }
    }
});
/* network_debugger.js */

if (ENABLE_NET_DEBUGGER) {
    // ENABLE_NET_DEBUGGER 时这个组件才生效
    cc.Class({
        extends: cc.Component,properties: {
            location: {
                default: new V2(100,200)
            }
        },update: function () {
            ...
        },});
}
else {
    // 否则这个组件什么也不做
    cc.Class({
        extends: cc.Component
    });
}

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

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

  • 你应当很谨慎地使用全局变量,当你要用全局变量时,应该很清楚自己在做什么,我们并不推荐滥用全局变量,即使要用也最好保证全局变量只读。
  • 添加全局变量时,请小心不要和系统已有的全局变量重名。
  • 你需要小心确保全局变量使用之前都已初始化和赋值。
  • 你可以在插件脚本中自由封装或者扩展 Cocos2d 引擎,但这会提高团队沟通成本,导致脚本难以复用,合并脚本时也容易冲突。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读