Cocos Creator模块化脚本

Cocos Creator 允许你将代码拆分成多个脚本文件,并且让它们相互调用。这个步骤简称为 模块化。

模块化使你可以在 Cocos Creator 中引用其它脚本文件:

  • 访问其它文件导出的参数
  • 调用其它文件导出的方法
  • 使用其它文件导出的类型
  • 使用或继承其它 Component

Cocos Creator 中的 JavaScript 使用和 Node.js 几乎相同的 CommonJS 标准来实现模块化,简单来说:

  • 每一个单独的脚本文件就构成一个模块
  • 每个模块都是一个单独的作用域
  • 以 同步 的 require 方法来引用其它模块
  • 设置 module.exports 为导出的变量

当你在脚本中声明了一个组件,Creator 会默认把它导出,其它脚本直接 require 这个模块就能使用这个组件。

// Rotate.js

cc.Class({
   extends: cc.Component,
   // ...
}); SinRotate.js 
// SinRotate.js

var Rotate = require("Rotate");

var SinRotate = cc.Class({
    extends: Rotate,
    update: function (dt) {
        this.rotation += this.speed * Math.sin(dt);
    }
});

模块里不单单能定义组件,实际上你可以导出任意 JavaScript 对象。假设有个脚本 config.js

// config.js - v2

var cfg = {
    moveSpeed: 10,
    version: "0.15",
    showTutorial: true,

    load: function () {
        // ...
    }
};
cfg.load();

module.exports = cfg;

现在如果我们要在其它脚本中访问 cfg 对象:

// player.js

var config = require("config");
cc.log("speed is", config.moveSpeed);

module.exports 的默认值:
当你的 module.exports 没有任何定义时,Creator 会自动优先将 exports 设置为脚本中定义的 Component。如果脚本没定义 Component 但是定义了别的类型的 CCClass,则自动把 exports 设为定义的 CCClass。

导出变量

module.exports 默认是一个空对象({}),可以直接往里面增加新的字段。

// foobar.js:

  module.exports.foo = function () {
      cc.log("foo");
  };
  module.exports.bar = function () {
      cc.log("bar");
  };
// test.js:

  var foobar = require("foobar");
  foobar.foo();    // "foo"
  foobar.bar();    // "bar"

module.exports 的值可以是任意 JavaScript 类型。

// foobar.js:

  module.exports = {
      FOO: function () {
          this.type = "foo";
      },
      bar: "bar"
  };
// test.js:

  var foobar = require("foobar");
  var foo = new foobar.FOO();
  cc.log(foo.type);      // "foo"
  cc.log(foobar.bar);    // "bar"

以上就是CocosCreator学习之模块化脚本的详细内容,更多关于CocosCreator模块化脚本的资料请关注程序员的世界其它相关文章!

CocosCreator学习之模块化脚本的更多相关文章

  1. JavaScript中的事件委托机制跟深浅拷贝

    今天聊下JavaScript中的事件委托跟深浅拷贝一、事件委托首先呢,介绍一下事件绑定//方法一:通过onclick 点击 function clickEvent(){alert("点击事件");}//方法二:通过addEventListener 点击 var btn = doc......

  2. React三大属性之props的使用详解

    上期讲了state,接下来讲讲props。props功能在于组件间通信(父子组件),首先说说在各种组件中的用法:类组件//父组件传值class Father extends React.PureComponent{render(){return (<Son value={"son&q......

  3. JavaScript 中的六种循环方法

    Javascript中的遍历循环1.for循环对于数值索引的数组来说,可以使用标准的for循环来遍历值const arr=[1,2,3,4];for(let i=0;i2.for...in循环for...in循环可以用来遍历对象的可枚举属性列表(包括原型链上的属性)const myObject={}......

  4. JS数组处理汇总

    join()方法:将数组中所有元素通过指定分隔符连接成一个字符串举例:myArr.join('-') // 用'-'符号拼接concat()方法:将两个数组或多个数组合并成一个数组举例:myArr.concat(arr1, arr2, ..., arrN)注意:该方法不会改变现有的数组,所以可以和空......

  5. jquery表格插件Datatables使用、快速上手

    Datatables使用一、简介官网:https://datatables.net/ 中文官网:http://datatables.club/Datatables是一款jquery表格插件。它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能。操作DOM的分页,即时搜索和排序,几乎支持任......

  6. jquery文本框内容改变事件

    /** * 内容改变时并不会触发事件,但是在失去焦点的时候会触发。*/$("#inputid").change(function(){ console.log($(this).val());});/** * 只要文本类容发生改变,就会触发该事件 */$("#inp......

  7. 文件上传漏洞全面渗透姿势总结

    文件上传漏洞全面渗透姿势总结0x00 文件上传场景(本文档只做技术交流,切勿进行违法犯罪操作,请做一个好人,不给别人添麻烦)文件上传的场景真的随处可见,不加防范小心,容易造成漏洞,造成信息泄露,甚至更为严重的灾难。比如某博客网站评论编辑模块,右上角就有支持上传图片的功能,提交带有恶意字符串的图片后,......

  8. CocosCreator实现技能冷却效果

    CocosCreator实现技能CD效果在很多游戏里面都有技能,玩家在点击技能按钮后技能会有一个冷却的时间,当冷却时间过了之后技能才可以再次使用在cocos中实现这个效果很简单,需要用到精灵组件首先将技能按钮的图片拖到canvas下然后在技能按钮下新建一个label像这样然后新建TS脚本把下面的代码......

  9. JavaScript中是如何定义私有变量的

    JavaScript并不像别的语言,能使用关键字来声明私有变量。我了解的JavaScript能用来声明私有变量的方式有两种,一种是使用闭包,一种是使用WeakMap。 前言 JavaScript并不像别的语言,能使用关键字来声明私有变量。我了解的JavaScript能用来声明私有变量的方式......

  10. jQuery在线引用地址

    转:https://www.cnblogs.com/lmyau/p/7736269.html1.官网jquery压缩版引用地址:3.1.1版本:<script src="https://code.jquery.com/jquery-3.1.1.min.js">&l......

随机推荐

  1. Java多线程总结(二)

    四.Java多线程的阻塞状态与线程控制上文已经提到Java阻塞的几种具体类型。下面分别看下引起Java线程阻塞的主要方法。1.join()join —— 让一个线程等待另一个线程完成才继续执行。如A线程线程执行体中调用B线程的join()方法,则A线程被阻塞,知道B线程执行完为止,A才能得以继续执行......

  2. C# 实现一个基于值相等性比较的字典

    C# 实现一个基于值相等性比较的字典C# 实现一个基于值相等性比较的字典Intro今天在项目里遇到一个需求,大概是这样的我要比较两个 JSON 字符串是不是相等,JSON 字符串其实是一个 Dictionary 但是顺序可能不同,和上一篇 record 使用场景 中的第一个需求类似,前面我们介绍过使......

  3. java小程序之控制台字符动画的实现

    说在前面大一软件工程在读,java萌新一只,第一次写博客,技术很菜勿喷。如有错误欢迎指出!这个小程序是给朋友的生日礼物,耗时半天,实际写起来碰到的知识点和困难还挺多,故发出来分享一下。程序效果可设置画布尺寸,添加图形元件,设置元件坐标和效果。元件闪烁效果,横向滚动效果。代码呈现图形元件父类publi......

  4. php中yum命令用法详解

    在php中关于yum命令还是比较多的,主要是因为在配置linux环境,linux中安装、卸载等各种操作中,因此,掌握命令还是相当重要的,在很多命令中,最常见使用的就是yum命令,总共有七个yum命令,每一种使用操作都相当的实用,下面就这些命令,详细给大家做下讲解。1、yum install命令表示安......

  5. tcpdump抓包及tshark解包方法介绍

    tshark是wireshark的命令行工具,通过shell命令抓取、解析报文。tcpdump是Linux系统下的抓包工具。wireshark和tcpdump都共同使用 libpcap作为其底层抓包的库,tshark也可以抓取报文。有时候需要在linux系统或者ARM开发板中进行抓包,使用tcpdu......

  6. Java 如何使用正则表达式去除前导0

    我就废话不多说了,大家还是看代码吧String s="0000000002121210"s=s.replaceAll("^(0+)", "");System.out.println(s);补充:Java中数字处理去掉末尾的0实例如下所示:p......

  7. Java实现一个顺序表的完整代码

    实现一个顺序表接口实现定义一个MyArrayList类,在类中实现以下函数public class MyArrayList {}数组的定义public int[] elem;//定义一个整形数组public int usize;//usize表示数组的长度public MyArrayList(){t......

  8. C#编写 HTML生成PDF

    html中 <body> <div style="text-align:center;"> <iframe id="pdframe" width="900px;" height=&q......

  9. Ocelot一个优秀的.NET API网关框架

    1 什么是Ocelot?Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Butterfly Tracing集成。2 如何使用Ocelot?首先,创建2个WebApi项......

  10. Vue+node实现音频录制播放功能

    实现效果:主要实现代码逻辑部分,具体页面结构就不一一介绍了。vue部分:安装recorderxcnpm install recorderx --save 或者npm install recorderx --save在具体的组件中引入<script>import axios from &q......