Cocos2d-x Lua运行流程

Cocos2d-luaCocos2d-x引擎添加了Lua绑定的版本。使用C++Cocos2d-x引擎开发时,编写的代码是直接调用Cocos2d-x引擎的API,因为Cocos2d-x引擎也是使用C++编写的,所以无需进行语言转换。而使用LuaCocos2d-x编码时,编写的代码必须通过LuaEngine引擎执行,LuaEngine引擎封装了Cocos2d-x引擎的API,所以相当于使用Lua脚本在调用Cocos2d-xAPI

Cocos2d-lua.png

Cocos2d-lua.png

主入口文件 main.lua

main.lua启动文件是Cocos2d-lua项目默认主入口,项目启动时默认首先执行main.lua文件。

运行流程

步骤0:设置 编译后的客户端开始执行时,使用FileUtils加载Luac文件的提示是否显示。

cc.FileUtils:getInstance():setPopupNotify(true)

步骤1:将源代码src目录和资源res目录添加到文件搜索路径

cc.FileUtils:getInstance():addSearchPath("src/")
cc.FileUtils:getInstance():addSearchPath("res/")
注:通过addSearchPath()方法设置源代码和资源的搜索路径

步骤2:加载配置文件读取配置

require "config"
  • config.lua配置文件用于定义初始化所使用的全局变量
  • require()方法表示引入一个文件,使用require()方法加载文件的过程会检查文件的lua语法,同时会完成被加载文件内部变量的初始化。

步骤3:执行初始化

加载cocos/init.lua文件,根据config.lua配置文件对cocos2d-lua框架进行初始化。

require "cocos.init"

步骤4:加载app目录下MyApp.lua文件,创建App对象并调用run()函数。

local function main()
    require("app.MyApp"):create():run()
end
  • 调用对应classCreate()方法创建对象,并执行run()方法。
  • run()函数用于配置第一个进入的场景,默认为MainScene
  • 通过载入的app.MyApp模块创建一个MyApp实例,并调用实例的run()方法,此时将启动执行MyApp脚本。

配置文件 config.lua

  • DEBUG
    设置输出调试信息选项,即通过控制不同的print()输出信息。
    0 表示关闭
    1 表示打印少量调试信息
    2 表示打印标准完整的调试信息
  • CC_USE_FRAMEWORK
    设置是否使用quick框架,其中包括MVC框架。
    *CC_SHOW_FPS
    设置是否显示FPS等显卡信息
  • CC_DISABLE_GLOBAL
    设置是否允许定义全局字段
  • CC_DESIGN_RESOLUTION
    设置不同分辨率

默认应用 MyApp.lua

应用文件:app/MyApp.lua

local  MyApp = class("MyApp", cc.load("mvc").AppBase)
function MyApp:onCreate()
    math.randomseed(os.time())
end
return MyApp
  • MyApp类继承自mvc中的cc.mvc.AppBase类,系统自动查找packages/mvc/AppBase.lua文件,AppBaseQuick框架自带的一个MVC的应用程序基础类,此类为应用程序提供一些逻辑控制上的功能,如进入场景、切换场景等。
  • class()方法本身是Quick框架定义的用于创建自定义lua类的函数,function class(classname, super)函数参数classname表示类名,super表示父类或创建对象实例的函数。

MVC

MVC是一种组合设计模式,被广泛应用在带有图形交互的用户界面程序(GUI)开发中。MVC的宗旨在于分离关注点(SoC),将界面表现和业务逻辑分离。(SoC)原则在现代软件工程中是一个非常重要的设计理念。对于实际问题,要划分不同的关注点,且关注点之间必须隔离开来,这样才能达到 更好的代码重用,以获得鲁棒性、可适配性、可维护性。

mvc.png

Cocos2d本身并不是基于MVC的理念设计的,在Cocos2d_xCCSceneCCLayerCCSprite等类都是CCNode的子类,开发流程基本是这样的:

  1. 通过应用程序代理类来初始化第一个即主场景
  2. 场景中实例化一个或多个布景图层,并将其添加进去。
  3. 布景图层中实例化一个或多个精灵,并将其添加进去。
  4. 场景处理用户输入,例如Touch事件和加速计的改变。同时更新布景图层和精灵,让精灵运行一个或多个动作等。
  5. 场景中运行一个游戏循环(一般是1/60更新一次),然后布景图层和精灵在游戏循环中做更新和游戏逻辑。

对于手游而言,界面UI的布局与显示都是由View负责的,点击事件手势滑动等操作是由Controller来处理的,游戏中需要的数据是由Model负责的。

local MyApp = class("MyApp", cc.load("mvc").AppBase)

/src/packages/mvc/AppBase.lua中定义了一个AppBase基类,作为所有Quick游戏的Lua入口,由player新建的工程,有个app/MyApp.lua文件就是继承自AppBase类。

AppBase功能类似于iOS工程中的AppDelegate.m 实现的功能:

  • 程序前后台切换事件的接收和分发
  • framework 提供程序退出接口
  • 提供创建 sceneview 的接口,并约定其存放路径。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容