Cocos2d-x之项目结构分析
| 版权声明:本文为博主原创文章,未经博主允许不得转载。
1.下面是我们创建cocos2d的工程MyGame01里的文件资源
2. 在下面;文件解决方案下面有6个项目,我们的启动优先项为MyGame01;在MyGame01下有四个项resource,src,win32和外部依赖项;
1)、在src中的代理程序;应用程序的代理,包含游戏初始化游戏,创建场景,图层,精灵,进入后台,前台等等的一些方法
2)、在win32中的是main.cpp;为程序入口
3)、外部依赖项是MyGame01项目依赖的外部项目;也就是MyGame01上面5个项目都可以添加依赖,来使用它们
3.详细解读代码:
1)、首先我们找到程序入口,查看main.cpp代码
看到return Application::getInstance()->run();程序这行代码;我们转到run()函数的定义,看run()函数如何执行的
首先我们看到的是:
一个初始化导演的代码,在是一个设置OpGLVIew视图的代码;有一个游戏无限循环的循环结构while(!glview->windowShouldClose())的循环体;!glview->windowShouldClose()表明:当程序运行的窗口没有关闭的时候将无限次循环循环体内的方法,在循环体内有两个方法:
director ->mainLoop();
//导演类执行mainLoop()主循环
glview->pollEvents();
//这个是获取游戏在运行过程中的一些触发事件,如:点击鼠标,屏幕,摇动设备,重力感应,加速度感应等等
run()中还有一个方法:release()是一个释放内存的函数
在进入main.cpp之后;程序有main.cpp中的AppDelegate app;这句代码;程序就会序会执行代理程序AppDelegate;在AppDelegate.h中我们可以看到三个重要方法;AppDelegata 是控制应用程序生命周期的。
virtual bool applicationDidFinishLaunching();
//这个方法将会在应用程序完成了加载之后执行
比如:游戏图层的切换,应用程序启动完成之后,执行这个函数,来初始化界面的操作可以放在这个函数内
virtual void applicationDidEnterBackground();
//应用程序进入后台之后,这个方法将会被调用
比如:手机上按下home键,切换到手机主屏是,游戏调用此方法进入后台,电话来的时候,进入电话拨打界面,游戏自动暂停(包含了一些动画的停止,精灵等等游戏场景的停止),游戏进入到后台
virtual void applicationWillEnterForeground();
//将应用程序从后台调入前台时,这个方法将会被执行
比如:电话打完之后,再次进入游戏时,将调用此方法;将游戏从后台调入到前台运行
三个方法在AppDelegate.cpp中有具体实现的方法,还可以自己在具体化。如下:
1)、applicationWillEnterForeground();
2)、applicationDidEnterBackground();
在上面图中的有关声音引擎的部分可以选择注释掉,也可以不注释掉,这是当你手机随着进入后台或进入应用时,进行有关背景音乐的控制
3)、applicationDidFinishLaunching()
1)、首先获得OpenGLView视图
auto
director = Director::getInstance();
auto
glview = director->getOpenGLView();
2)、设置帧频率FPS,是否显示(FPS每秒多少帧),就是运行HelloWorld窗口左下角的那个变换的东西,如果将ture改为false,左下角将不会显示任何的东西了
// turn on display FPS
director->setDisplayStats(true);
director->setDisplayStats(false);
3)、设置帧之间的刷新的间隔
// set FPS. the default value is 1.0/60 if you don't call this
director->setAnimationInterval(1.0
/ 60);
如果帧率设置的是1/60,就是1/60秒调用一次mainLoop,mainLoop里面有drawScene
4)、创建和运行场景
// create a scene. it's an autorelease object
auto scene = HelloWorld::createScene();
// run
director->runWithScene(scene);
当程序运行到auto scene =
HelloWorld::createScene();时;接下来程序将会运行到HelloWorldScene.h这个代理程序;打开HelloWorldScene.h我们可以知道,其实场景就是创建了一个图层并运行图层;他继承自Layer class HelloWorld : public cocos2d::Layer;HelloWorldScene这个是创建的一个图层,它public继承自图层Layer类
在下图中的createScence方法中;它依次执行;创建场景创建图层
当创建图层时,我们看到auto layer = HelloWorld::create();我们转到create()的定义处,下图;
发现图层是通过CREATE_FUNC(HelloWorld);来创建的;采用了一个宏CREATE_FUNC(HelloWorld);这个其实就是类方法create的实现。查看CREATE_FUNC的定义;
menuCloseCallback(cocos2d::Ref* pSender);一个回调方法,
在宏CREATE_FUNC的定义中有一个pRet->init();,在这条语句执行的时候,将会跳转到init()方法,来创建图层;
this是指当前指向自身的对象,因为HelloWorld继承自Layer类;因此此处的this指向的对象是Layer(图层),this->addChild();在HelloWorldScene中表示添加什么到图层中去, 顺序为: 创建create--->位置设置setPosition--->添加addChild
项目的添加和引用;增添依赖关系
解决方案右键单击,添加---> 添加现有项;
然后会弹出一个窗口;cocos2d --->external--->任何一个文件夹(这里以Box2D为例)--->proj.win32--->,选中.vcxproj的文件;在打开
添加好了之后,在添加项目依赖项;解决方案右键单击,添加---> 属性;
弹出一个属性设置窗口,如图操作:
Cocos2d-x之项目结构分析的更多相关文章
- Android导入Cocos2D的Sample项目
导入Cocos2D项目到Android的Eclipse时注意以下几点 1. Set up Variables: Eclipse->Windows->Preferences->Gene ...
- Android应用开发项目结构分析
初学Android开发,初步理解的Android应用项目结构,备忘. 一.清单文件AndroidManifest.xml 功能: 1.供Android平台调用,供其了解本应用的信息,因此,所有的组件( ...
- 关于QT安装的一些心得(QT551, VS2013)项目开发配置,以及项目结构分析
推荐QT开发的配置如下: 我的硬件配饰中等,所以推荐一下配置: QT551版本,目前QT最新版8.0,为了稳定选择551版本 VS2013IDE, 因为VS2010与VS2013的编译器相同,但是VS ...
- Android项目结构分析
andriod项目目录结构如下图: 1. src目录 该目录一个普通的保存java源文件的目录,其和普通java工程中的src目录是一样的. 2. gen目录 此目录用于存放所有由ADT插件自动生成的 ...
- Android基础之项目结构分析
创建了第一个Android项目,用工具开发Android项目,我们有必要熟悉项目的目录结构,清楚各个项目下面放置的是什么东西.展开整个项目,其根目录结构(选用不同版本的SDK文件目录结构会有一些不同, ...
- Android Studio 新建项目结构分析
这是我刚刚新建的项目 默认都是Android模式的项目结构,但这并不是真实的目录结构 把他换成Project模式 项目的真实目录结构 1app 项目的代码,资源 2 gradle wrappere ...
- Scrapy项目结构分析和工作流程
新建的空Scrapy项目: spiders目录: 负责存放继承自scrapy的爬虫类.里面主要是用于分析response并提取返回的item或者是下一个URL信息,每个Spider负责处理特定的网站或 ...
- vue-cli入门之项目结构分析
一个vue-cli的项目结构如下,其中src文件夹是需要掌握的,所以本文也重点讲解其中的文件,至于其他相关文件,了解一下即可. 文件结构细分 1.build——[webpack配置] build文件主 ...
- vue-cli项目结构分析
总体框架 一个vue-cli的项目结构如下,其中src文件夹是需要掌握的,所以本文也重点讲解其中的文件,至于其他相关文件,了解一下即可. 文件结构细分 1.build——[webpack配置] bui ...
随机推荐
- QTP加载第三方DLL(C#)实现清除IE缓存(转)
由于QTP的默认编程语言是VBS, 而VBS是一种相对来说功能比较局限的脚本语言,因此我们在编写自动化测试脚本时会有很多功能无法很好的实现. 相对来说c#是一种高级编程语言, 可以实现大多数windo ...
- javaIO流(二)--字节流与字符流
一.流的基本概念 在java.io包中,File类是唯一一个与文件本身有关的程序处理类,但是File类只能操作文件本身,而不能操作文件内容,IO操作的核心意义在于输入和输出操作.而对于程序而言,输入和 ...
- Rikka with Nickname (简单题)
Rikka with Nickname 链接:https://www.nowcoder.com/acm/contest/148/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒空间限制:C/ ...
- Java Console/控制台 打印表格
功能:控制台打印表格,支持字段动态长度,左对齐,右对齐,居中,设置最大列长,设置列间隔符,设置最多打印多少行. 类下载地址:http://download.csdn.net/download/j506 ...
- SSM+Maven使用PageHelper插件分页
官方网站: https://pagehelper.github.io/docs/howtouse/#2-%E9%85%8D%E7%BD%AE%E6%8B%A6%E6%88%AA%E5%99%A8%E6 ...
- js高级编程思想
js惰性思想: 能够执行一次就搞定绝对不会执行第二次 function createXHR(){ var xhr=null, falg=false, ary=[ function(){ return ...
- shell条件测试语句
- 第十三章 存储之volume
容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题.首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动.其 ...
- WTSEnumerateSessions 枚举session信息
http://dwbpriarie.lofter.com/post/1cd339fc_8cf728c https://www.cnblogs.com/priarieNew/p/9755655.html ...
- 解读dbcp自动重连那些事(转)
转自:http://agapple.iteye.com/blog/791943 Hi all : 最近在做 offerdetail 优化时,替换了数据库驱动,从 c3p0 0.9.1 -> db ...