位置: 编程技术 - 正文

Cocos2d-js模块化开发的一种解决方案(cocos2dx框架)

编辑:rootadmin
一、Cocos2d-js ModuleCocos2d-js Module(下文简称Module)是一个用于Cocos2d-js游戏引擎模块化编程的一种解决方案。Module可以让项目如C&#;&#;的#include、Lua的require等语法那样加载其他文件/模块的内容。先不谈做Cocos2d-js模块化编程的原因和原理,首先看看具体做了什么。整个解决方案仅包括一个只有行代码量的名为module.js的文件,对外暴露3个全局函数load、include、dumpModuleInfo,它们分别的作用如下:load(name, func)添加一个模块,第一个参数name代表模块的名字,第二个参数func是添加模块时调用的函数。include(name)获取一个模块,name是该模块的名称。dumpModuleInfo()打印日志,显示当前所有已经加载过的模块。这三个函数实现了基础的模块化开发功能。load:在Module中一般要求一个文件就是一个模块,load函数作为一个文件的整体(即一个JavaScript文件调用一次load函数),load函数保证模块被保存在第二个参数func中,避免污染全局的命名空间,同时要求第一个参数name和该文件所处的路径相同。在其他编程语言中和load函数功能类&#;的语法并不存在,倒是有点类&#;于在Lua中调用require加载模块时,被加载的文件中的return函数的功能;include: 类&#;于C&#;&#;的include、C#的using、Lua的require等,作用是载入一个模块,该模块名称需要和文件路径对应;dumpModuleInfo:显示当前所有已经加载过的模块,便于调试。一个更加完整的例子:在src文件夹中添加一个HelloModuleScene.js文件,这个模块是一个显示"Hello Module"的Scene,内容如下修改工程中的main.js函数,注意在这一步中使用了Cocos2d-js提供的require函数执行module.js文件如果你经常使用Cocos2d-js进行游戏开发的话,此时可能会提出疑问,这里是不是漏了一步,还没在项目中的project.json文件中jsList数组里添加"src/HelloModuleScene.js",怎么能在main.js中调用HelloModuleScene呢。这其实正是Module的功能之一。运行例子之后显示二、Module的优势与限制1.Module的优势:提供类&#;于C&#;&#;的#include、Lua的require的功能,需要使用哪个模块就include哪个模块,调用关系清晰可见模块化编程,不再污染全局命名空间一个模块对应于一个继承自cc.Class的类(虽然这不是强制的,即使是一个普通的Object作为模块也可以),要求程序员统一使用面向对象的方式编程不用再去管project.json中的jsList数组,也就不需要再去思考JavaScript文件执行顺序的问题轻量级,仅需额外添加一个行代码的JavaScript文件适合大中型游戏项目开发有利于模块的复用2. Module的限制:当两个或多个模块互相include时,不能在模块的func的作用域中(load的第二个参数)调用被引用模块的功能,这样会造成不可预知的结果;应该仅在当前模块的类的函数作用域中调用被引用的模块功能(即使不使用Module也同样会有这种情况发生,这个概念比较抽象,可能在之后的博文中进行解释)不适合小型游戏开发因为使用到Cocos2d-js jsb提供的require函数功能,而这个函数在html5版本的Cocos2d-js中不存在,所以不适合跨Native和Browser的项目使用三、为什么要模块化开发C&#;&#;有#include、C#有using、Java有import、Lua有require,就连同门的Node.js也有自己的module机制,JavaScript却缺乏语法层次上的模块化编程支持。在经历了一些项目的洗&#;后,笔者越发感觉使用Cocos2d-js引擎开发的大中型游戏项目需要一种有效的、简单的方法进行模块化编程,而不仅仅是让jsList中配置的JavaScript文件一个一个按顺序执行。在实际开发中有以下几种文件之间调用关系的解决方案:1. 全部使用全局变量,这是最次的方案,也是最简单易懂的方案,非常适合小型html5游戏开发,这种方案的代码一般是这样的缺点就是污染了全局命名空间,维护和复用困难。2.每个文件用一个函数包起来执行,所有类都统一用一个Object保存起来,这样就避免了污染全局命名空间在上面的例子中,游戏中使用的类都保存在game这个全局Object之中,需要调用某个类的时候加上game的前缀就可以了。这种方法确实管用,但也有其缺陷,那就是有时候调用层次太多,想要用简短的局部变量来保存某个类时,问题就出来了。例如游戏主角类game.character.Hero需要多次调用怪物类game.character.Monster(甚至有可能更长的前缀),希望使用var Monster = game.character.Monster的方法来简化调用。如果仅仅是Hero类调用了Monster类,那么只需要管理好jsList数组,注意文件执行顺序,让Monster.js在Hero.js之前执行,那么一切安好。但是如果Monster类也使用这种方法调用Hero类这个时候不论怎么安排jsList数组的顺序,让Monster.js和Hero.js谁先执行,都会出问题。因为JavaScript文件按顺序执行的原因,假设Hero.js先执行,那么当Hero.js执行的时候Monster.js还没执行过,所以执行var Monster = game.character.Monster的时候其实Monster还未定义,因为当前Monster.js根本就还没执行,game.character.Monster就是一个undefined!目前已有的一些解决方案思路:使用其他的JavaScript框架,例如pureMVC这种做法的好处是可以使用比较成熟的框架,缺点是学习成本较高,而且面向对象的实现和Cocos2d-js有较大的差别,可能在类的继承中出现问题。使用Cocos2d-js提供的require其实这根本谈不上是一种模块化编程的解决方案,Cocos2d-js提供的require函数和Lua中的有很大区别,前者是执行一遍JavaScript文件,后者是将文件内容加载到模块中并缓存起来。但是require功能为模块化编程提供了基础。Module解决方案使用Module解决方案,前面提到的Monster和Hero的例子将变成这样 这样一来就可以在Hero类或者Monster类的函数中互相调用对方了,什么jsList,什么文件执行顺序,再也不用理会了!最后附上git地址Cocos2d-js-module git: [Cocos2d-JS MVC模块开发]

推荐整理分享Cocos2d-js模块化开发的一种解决方案(cocos2dx框架),希望有所帮助,仅作参考,欢迎阅读内容。

Cocos2d-js模块化开发的一种解决方案(cocos2dx框架)

文章相关热门搜索词:cocos2d-js教程,cocos2dx设计模式,cocos2d-js-min.js,cocos2dx框架,cocos javascript,cocos2dx-js,cocos2d-js-min.js,cocos2dx-js,内容如对您有帮助,希望把文章链接给更多的朋友!

Cocos2d-x结构学习(十七)CCSkeletonAnimation、CCSkeleton、AnimationState、AnimationState、SkeletonData 1、CCSkeletonAnimation:继承自CCSkeleton,骨骼动画类classCC_EX_DLLCCSkeletonAnimation:publicCCSkeleton{public:std::vectorAnimationState*states;//状态容器staticCCSkeletonAnimation*create

游戏引擎学习——Cocos2d-x-3.4引擎(1.源码粗分析) 游戏引擎学习——Cocos2d-x-3.4引擎(1.源码粗分析)首先利用cocos2d构建一个新项目HelloWorld:在OSX终端输入:cocosnew-pcom.wangshaui.helloworld-lcppHelloWorld;然后用X

Cocos2d-JS特效 Cocos2d-JS提供了很多特效,这些特效事实上属于间隔动作,特效类cc.GridAction类,也称为网格动作,它的类图如下图所示。网格动作类图网格动作cc.GridActio

标签: cocos2dx框架

本文链接地址:https://www.jiuchutong.com/biancheng/369062.html 转载请保留说明!

上一篇:实例:Cocos2d-js中使用纹理对象创建Sprite对象(实例的英文)

下一篇:Cocos2d-x结构学习(十七)CCSkeletonAnimation、CCSkeleton、AnimationState、AnimationState、SkeletonData(cocos2d原理)

  • 销售货物增值税怎么算
  • 财务软件怎么样才能用
  • 员工出差自驾怎么看待
  • 暂估入库发票回收怎么办
  • 增值税税率如何计算
  • 退货退款分录
  • 股息红利税补缴什么意思
  • 厂家返利计提会计分录
  • 从关联企业获得非工资报酬怎么缴纳个税?
  • 甲供材简易征收税率
  • 进项发票和销项发票金额相同还需要交税金吗
  • 增值税计提金额
  • 审核发票的要素
  • 公司为员工负担个税怎么做账
  • 海关对现金携带数量有要求吗
  • 如果辞职了,能一次性拿到钱吗?
  • 支付销售产品的保险费计入什么科目
  • 帮客户采购会计分录
  • 电子发票没有发票号码是怎么回事
  • 分期开发是什么意思
  • 城建税印花税教育附加税各是多少
  • 电子商务出来干嘛
  • 测量仪器进工程成本的什么科目?
  • 把输入法关闭
  • wordpress portfolio
  • 以太网默认网关怎么查看
  • ctfmon.exe文件在哪
  • 投资公司要具备什么
  • 长期股权投资初始计量和后续计量的区别
  • 员工出差机票计入什么科目
  • 合同内容和开票内容不一致
  • yii2组件的理解
  • 【AIGC】6、Segment Anything | Meta 推出超强悍可分割一切的模型 SAM
  • javaweb项目简介
  • typescript tsconfig
  • 转出未交增值税最终怎么转平
  • 认缴制情况下 公司一定要出资到位再注销吗
  • python random random
  • 原材料暂估入库成本结转处理
  • 个人给境外公司付款
  • 引导式申报带出来的开票额与金税盘显示的不一致
  • 提取企业所得税怎么做会计科目
  • 现金劳务收入会计分录
  • 厂房出租一年多少钱
  • 财政总预算会计的特点
  • 经营活动现金净流量为正说明什么
  • sql server 视图排序
  • 小型微利企业计算企业所得税
  • 法人向公司借款如何做账
  • 企业租车流程
  • 代销手续费如何交增值税m
  • 应发工资计入什么科目
  • 旅行社增值税2020
  • 成本法长期股权投资初始成本确认
  • 固定资产报废如何进行账务处理
  • 库存商品坏账准备怎么算
  • 采购业务 货物收到 发票收到
  • 公司车还车贷计入什么科目
  • 购买超市购物卡有优惠吗
  • 企业购买土地时土地款缴纳的耕地占用税入账
  • 工会经费征收项目是什么
  • 什么是电子商业承兑汇票贴现
  • 64位Vista、Windows7系统IIS连接数据库故障完美解决
  • 苹果正式推送ios
  • cmos是一种什么芯片
  • win10 mobile下载
  • cpqdfwag.exe是什么进程 能结束吗 cpqdfwag进程查询
  • Windows XP Professional VLK SP2 简体中文版
  • 深入理解新发展理念,推进供给侧结构性改革心得体会
  • unity3d documentation
  • 用什么命令查看linux启动信息
  • jquery层级选择器
  • 表单元素的属性
  • 简单的智能家居
  • python socks
  • javascript Base类 包含基本的方法
  • 滴滴发票怎么查行程
  • 高速发票查询平台官网
  • 辽宁国家税务局公务员职位2023
  • 漯河经济开发区税务局电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设