[cocos2dx]cocos2dx-lua中的框架MVC
2016-06-01 14:59
741 查看
MVC简介
MVC,即Model View Controller。Model(模型),一般负责数据的处理;View(视图),一般负责界面的显示;Controller(控制器),一般负责前端的逻辑处理。拿一款手机游戏来说,界面UI的显示、布局等就是View负责;点击了按钮,手势的滑动等操作由Controller来处理;游戏中需要的数据资源就交给Model。其中cocos、Controller、Model、View这个不用多说,Event里面保存的全局消息类型,Managers是用于管理游戏中的东东的,比如管理资源,管理各种场景切换,层的切换等等。Utilities提供一些工具类,比如字符串的处理等。大家也可以根据自己的需求来定制目录,比如定义一个NetCenter文件夹,专门用于处理网络的。本例子中没有用到数据操作和工具类,所以这两个文件夹为空。
流程实例
我们以游戏的运行流程为线索来展开说明。运行项目,进入到main.lua文件,来看看main函数:?
?
?
?
?
?
?
可以看到我们给三个按钮注册了响应函数menuCallback,在这个函数中,就是MVC中的V和C之间的“沟通”了。我们定义了一个自定义事件EVENT_CLICK_MENU_MAIN,并给这个事件添加了一个附带参数_usedata,这个参数保存的是三个按钮的tag。然后将这个事件发送给他的监听者。这里大家应该明白了,我们在对应的Controller中注册了EVENT_CLICK_MENU_MAIN的监听,但有这个事件发过来时,我们就响应。根据事件携带的参数_usedata,我们就知道了在View中,玩家点击了哪个按钮,这样做的好处是,保证了每个界面只有一个消息,我们只需要根据这个消息携带的附加参数来判断具体的事件,从而减少了消息个数,这样有助于游戏的效率。另外,我们在响应这个消息的时候,也会做一定的优化,来看看类MainLayerController的响应函数:
?
cocos2dx-lua框架流程
很多学习者甚至不知道enterScene(“MainScene”) 为什么里面可以是个字符串?新建cocos2dx-Lua工程之后,你首先看到的main.lua启动到MyApp.lua。
?
1. require(“app.MyApp”)
这里执行的MyApp.lua的代码是:
?
2. require(“app.MyApp”).new()
MyApp.new()执行后,执行的代码是:
?
?
3. require(“app.MyApp”).new():run()
这时候调用了
?
对于MyApp.lua文件,如果我修改成下面的样子,是不是你就理解了上面所做的事情:
?
修改为:
?
4. MainScene.lua
enterScene(“MainScene”) 为什么可以切换场景?
我们看下MyApp的父类AppBase里面:
?
Lua的MVC框架Sailor
Sailor 是一个 Lua 语言的 MVC 编程框架。支持跨平台,兼容 mod_lua 或者 mod_pLua, Nginx 的 ngx_lua, 或者任何支持 CGI 的 Web 服务器,如 Civetweb或者 Mongoose, 前提是必须有 CGILua。使用 Sailor 开发应用的目录结构如下:
/conf - 存放配置文件/controllers - 控制器/layouts - 布局文件/models - 模型/pub - 静态文件/runtime - 运行时生成的临时文件/views - .lp 视图文件
原文地址:http://www.2cto.com/kf/201505/399069.html
相关文章推荐
- CocosPods安装教程
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(5)---绘制基本图形
- cocos2d-lua中改变精灵图片的方法
- 2016 CocosPods安装教程
- quick-cocos 3.5 lua banding c++
- 关于Cocos2d-x物理引擎用到的类和使用
- 关于Cocos2d-x的瓦片地图
- Cocos2d-x Lua实现长按事件
- 关于Cocos2d-x的粒子系统
- cocos2d-x案例开发大全 几何跳跃源码解析及交叉编译再现
- 关于Cocos2d-x的数据存储
- Cocos开发中性能优化工具介绍(一):Xcode中Instruments工具使用
- 6月1号后苹果爸爸只爱IPv6 Cocos2d-x更新支持详解
- cocos2dx 2.x 将数据写入到txt文件
- cocos2dx 3.x 资源选择问题
- cocos2dx 游戏渲染优化 FOB 技术
- cocos creator prefab中的label设置容无效的问题
- cocos creator 触摸捕捉事件
- Cocos2d-js环境搭建
- quick cocos2dx截图保存到本地