美文网首页
Cocos2d-x Lua运行流程

Cocos2d-x Lua运行流程

作者: 白小白152 | 来源:发表于2019-09-30 14:17 被阅读0次

    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 的接口,并约定其存放路径。

    相关文章

      网友评论

          本文标题:Cocos2d-x Lua运行流程

          本文链接:https://www.haomeiwen.com/subject/xqvcpctx.html