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-x Lua运行流程_第1张图片
Cocos2d-lua.png

Cocos2d-x Lua运行流程_第2张图片
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)原则在现代软件工程中是一个非常重要的设计理念。对于实际问题,要划分不同的关注点,且关注点之间必须隔离开来,这样才能达到 更好的代码重用,以获得鲁棒性、可适配性、可维护性。

Cocos2d-x Lua运行流程_第3张图片
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 的接口,并约定其存放路径。

你可能感兴趣的:(Cocos2d-x Lua运行流程)