Quick-Cocos2d-X 捋一捋框架流程
猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢!
原文地址: http://www.cocos2dev.com/?p=535
一直比较关注Quick Lua,但是项目中一直使用的公司自有的Lua框架,所以一直没机会在实际中使用下Quick Lua。看到群里很多人都在用这个,我在这里梳理下开始使用的流程吧,我主要是说下实际使用上的流程问题。
比如很多学习者甚至不知道enterScene("MainScene") 为什么里面可以是个字符串?当然如果你已经很熟悉框架了,这篇文章就可以跳过了,呵呵。
下面开始吧!
一、前置准备
1、安装下载之类的,官方论坛写的很清楚了,我就不说了。http://wiki.quick-x.com/doku.php?id=zh_cn:get_started_create_new_project
2、关于IDE,我使用的IEDA,配置导出的api代码提示,还是挺方便的。http://wiki.quick-x.com/doku.php?id=zh_cn:get_started_install_intellij_idea
二、新建一个工程
新建之后,你首先看到的main.lua启动到MyApp.lua。
require("app.MyApp").new():run()
看MyApp.lua文件:
1、require("app.MyApp")
这里执行的MyApp.lua的代码是:
local MyApp = class("MyApp", cc.mvc.AppBase) -- 继承cc.mvc.AppBase return MyApp
这时候,你得到了MyApp这个类(lua关于类的实现网上很多)。
2、require("app.MyApp").new()
MyApp.new()执行后,执行的代码是:
function MyApp:ctor() MyApp.super.ctor(self) end
为什么new()了之后会执行MyApp:ctor()?请看function.lua下的function class(classname, super)方法:
function cls.new(...) local instance = cls.__create(...) -- copy fields from class to native object for k,v in pairs(cls) do instance[k] = v end instance.class = cls instance:ctor(...) return instance end
可以看到,在class的实现方法里面,给每个创建的类声明了一个new()方法,方法里面调用了ctor()构造方法(ctor只是个名字,所以不是有些人认为的new了之后,当然会调用构造方法,lua没有类,只是我们模仿了类)
3、require("app.MyApp").new():run()
这时候调用了
function MyApp:run() CCFileUtils:sharedFileUtils():addSearchPath("res/") self:enterScene("MainScene") end
所以进到了MainScene.lua。
对于MyApp.lua文件,如果我修改成下面的样子,是不是你就理解了上面所做的事情:
-- 声明类 MyApp = class("MyApp", cc.mvc.AppBase) --- 类构造方法 -- function MyApp:ctor() MyApp.super.ctor(self) end --- 对应cpp版的static create()方法 -- function MyApp:create() local myApp = MyApp.new() myApp:init() end --- 你自己的方法 -- @param self -- local function launchMainScene(self) CCFileUtils:sharedFileUtils():addSearchPath("res/") self:enterScene("MainScene") end --- init 方法 -- function MyApp:init() -- add code here launchMainScene(self) end
对应的main.lua将原来的require("app.MyApp").new():run()
修改为:
require("app.MyApp") MyApp:create()
这样你是不是更容易理解了,哈哈。
三、MainScene.lua
enterScene("MainScene") 为什么可以切换场景?
我们看下MyApp的父类AppBase里面:
function AppBase:enterScene(sceneName, args, transitionType, time, more) local scenePackageName = self. packageRoot .. ".scenes." .. sceneName local sceneClass = require(scenePackageName) local scene = sceneClass.new(unpack(totable(args))) display.replaceScene(scene, transitionType, time, more) end
这样你能理解了为什么连require文件都没有就能调用MainScene,当然你要留意下,它require时候的文件路径,scene默认写的app/scenes文件夹
好了,其他的应该按照上面的思路基本都能知道为什么了。我就不一一列举了。
Quick-Cocos2d-X 捋一捋框架流程的更多相关文章
- CI框架源码阅读笔记1 - 环境准备、基本术语和框架流程
最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动.最近项目少,总算是有了一些时间去写一些东西.于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时 ...
- 捋一捋js面向对象的继承问题
说到面向对象这个破玩意,曾经一度我都处于很懵逼的状态,那么面向对象究竟是什么呢?其实说白了,所谓面向对象,就是基于类这个概念,来实现封装.继承和多态的一种编程思想罢了.今天我们就来说一下这其中继承的问 ...
- SSH框架流程详解
解图: 由图可见,有三个框架{ ①. Struts_2 ②. Spring ③. Hibernate } 框架 作用 本质 同等于 Struts_2 实现MVC / 控制.跳转 过滤器(Filter) ...
- StageFright框架流程解读
1. StageFright介绍 Android froyo版本号多媒体引擎做了变动,新加入�了stagefright框架,而且默认情况android选择stagefright,并没有全 ...
- Spring Batch框架流程的简单介绍
Spring Batch流程介绍: 上图描绘了Spring Batch的执行过程.说明如下: 每个Batch都会包含一个Job.Job就像一个容器,这个容器里装了若干Step,Batch中实际干活的也 ...
- 捋一捋Spring Web的源码思路
Servlet前提 Java规定了Servlet Container为每一个web app创建一个Servlet Context:而Servlet Context中又包含了诸多Servlet -- 其 ...
- Android应用开发编译框架流程与IDE及Gradle概要
1 背景 建议阅读本文之前先阅读<Android Studio入门到精通>和<Groovy脚本基础全攻略>及<Gradle脚本基础全攻略>三篇博客作为背景知识,这样 ...
- yaf框架流程二
这篇讲讲yaf的配置文件,首先上我的配置代码: [common] ;必选配置 ;application.directory String 应用的绝对目录路径 ;可选配置 ;名称 值类型 默认值 说明 ...
- Log4j源码解析--框架流程+核心解析
OK,现在我们来研究Log4j的源码: 这篇博客有参照上善若水的博客,原文出处:http://www.blogjava.net/DLevin/archive/2012/06/28/381667.htm ...
随机推荐
- uva 10118(DP)
UVA 10118 题意: 有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果, 如果篮子里有两个相同的糖果,那么就可以把这两个(一对)糖果放进自己 ...
- hihocoder 1249(2015ACM/ICPC北京)
题意: 给你一块正方形的土地,里面有矩形的草地,要求把土地分成两份,满足以下两个条件 1.两边的绿洲,左边>=右边,差值尽可能的小 2.在满足1的情况下分给左边的土地尽快能的多 而且绿洲不会出现 ...
- (⊙o⊙)…
参考:ACdreamers a > b,GCD(a,b) = 1 => GCD(a^m-b^m,a^n-b^n) = a^GCD(n,m) - b^GCD(n,m) /*没有找到推理过程Q ...
- python设计模式浅析
今天简单聊聊python的设计模式,GOF设计模式(c++)和Head first design pattern(Java)是两本设计模式的经典,基本可以照搬在python上面,但是你会发现pytho ...
- 求n的阶乘
import java.util.Scanner; public class J { public static void main(String args[]) { //注释:int n=6 ...
- Ubuntu一些常用的软件安装及配置
软件 安装 Vim echo "y" | sudo apt-get install vim 安装搜狗输入法 这个我在虚拟机里面尝试了好多遍,不断恢复备份然后重试.终于有了这个纯靠命 ...
- Android颜色配置器
一.Android Color设置 1.在xml文件中 想设置颜色直接设置background的属性或者其他的color属性.随便设置一个颜色如#000,再点击左边的颜色方块,弹出颜色选择器选择颜色 ...
- Go 语言结构
Go Hello World 实例 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 & 表达式 注释 接下来让我们来看下简单的代码,该代码输出了"Hello ...
- Docker端口映射实现
默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器. 容器访问外部实现 容器所有到外部网络的连接,源地址都会被NAT成本地系统的IP地址.这是使用 iptables 的源地址伪装 ...
- 作业03-面向对象入门.md
1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系.步骤如下: 1.1 写出你 ...