【零起步开发Cocos2dx-3.x-王牌飞行员(二)】从程序的层次结构说起
2015-01-24 15:33
323 查看
------
原创博客,转载请注明出处:/article/8007808.html
------
在开发游戏之前,我们需要理清楚一些游戏的层次关系,虽然Cocosdx具有强大的跨平台特性,但是多了解一些底层的机制肯定不会有坏处。在新创建一个cocos2dx的项目以后,我们会发现,项目文件夹是这样的。
图片最上方的cocos2dx命令是利用cocos内建命令创建,其中-p指定的是项目的包名,-l指定的是项目的开发语言,最后指定项目名称,这样一个cocos2dx项目就创建了。在这个目录结构中,对于开发期间,最频繁使用的是Classes和Resources。在Classes里是我们编写的cpp文件和h文件,在Resources里是项目中所涉及到的资源文件。
说到这里,为了后续流畅的开发,不得不提一下cocos2dx程序的层次结构。首先,在最顶层的是Director,这是一个单例类,掌管着一些宏观上的游戏数据。在Director下面是Scene,Scene顾名思义是场景,比如游戏的开始界面,游戏界面,结束界面,这些都是不同的游戏场景。Scene下面是Layer,Layer是图层的意思,就是在同一个场景中,如果有多个物体同时出现,那么在一个图层上显示将会相当的混乱,因此引入图层的概念,通过层,将不同层的对象隔离开,分开处理,大大降低开发难度。最底层是Sprite,Sprite是游戏中最基础的元素,很多动作真正的实施者都是Sprite。
在本次开发中,我将各个Layer也设置为单例类,因为各个场景之间几乎没有公用的Layer,设置成Layer能减少程序出错的机会,并且使程序结构更加整洁。并且,在本次开发中,所有CPP类仅仅描述至Layer层,所有的Sprite都是在Layer中间直接声明的默认Sprite对象,而并非去继承Sprite类,这一切都是为了游戏能够简化,降低开发难度和出错概率。
这是目前本次项目的Classes文件夹中的内容,每个cpp文件中只包含一个同名类,这样保证了目录的清晰性。
下面简述一下各类的用途:
AppDelegate: 程序入口,初始化Director类的参数,场景构建,布景层挂载
BulletLayer: 子弹层,用批量渲染技术加载子弹并维护子弹数据
BulletUserData: 子弹数据
EnemyLayer: 敌机层,加载敌机并维护敌机数据,检测敌机与子弹、敌机与我机及碰撞,并且调用对应接口
EnemyUserData: 敌机数据
GameBackgroundLayer: 布景层,实现地图加载,循环滚动
PlaneLayer: 飞机层,渲染飞机动画,响应用户滑屏操作
PlaneUserData: 飞机数据
UFOLayer: 不明飞行物层,目前用于投放武器加强的buff和大招buff
UFOUserData: 数据记录类,用于记录gift的类型
现在开始,分析一下系统自带的Helloworld程序的系统层次,在系统自带的Helloworld中,蕴含着一个很绕的逻辑关系,至今我也没发现这么设计有什么好处,我们先来看一下头文件:
--------------------------------------------
本系列的博客的作品都会开源在github上:https://github.com/netbeen/flyingACE , 时时更新,欢迎大家star和fork,谢谢捧场!
某一关的测试视频demo:http://v.youku.com/v_show/id_XODgzNDQwNDgw.html?f=23404712&o=0
原创博客,转载请注明出处:/article/8007808.html
------
在开发游戏之前,我们需要理清楚一些游戏的层次关系,虽然Cocosdx具有强大的跨平台特性,但是多了解一些底层的机制肯定不会有坏处。在新创建一个cocos2dx的项目以后,我们会发现,项目文件夹是这样的。
图片最上方的cocos2dx命令是利用cocos内建命令创建,其中-p指定的是项目的包名,-l指定的是项目的开发语言,最后指定项目名称,这样一个cocos2dx项目就创建了。在这个目录结构中,对于开发期间,最频繁使用的是Classes和Resources。在Classes里是我们编写的cpp文件和h文件,在Resources里是项目中所涉及到的资源文件。
说到这里,为了后续流畅的开发,不得不提一下cocos2dx程序的层次结构。首先,在最顶层的是Director,这是一个单例类,掌管着一些宏观上的游戏数据。在Director下面是Scene,Scene顾名思义是场景,比如游戏的开始界面,游戏界面,结束界面,这些都是不同的游戏场景。Scene下面是Layer,Layer是图层的意思,就是在同一个场景中,如果有多个物体同时出现,那么在一个图层上显示将会相当的混乱,因此引入图层的概念,通过层,将不同层的对象隔离开,分开处理,大大降低开发难度。最底层是Sprite,Sprite是游戏中最基础的元素,很多动作真正的实施者都是Sprite。
在本次开发中,我将各个Layer也设置为单例类,因为各个场景之间几乎没有公用的Layer,设置成Layer能减少程序出错的机会,并且使程序结构更加整洁。并且,在本次开发中,所有CPP类仅仅描述至Layer层,所有的Sprite都是在Layer中间直接声明的默认Sprite对象,而并非去继承Sprite类,这一切都是为了游戏能够简化,降低开发难度和出错概率。
这是目前本次项目的Classes文件夹中的内容,每个cpp文件中只包含一个同名类,这样保证了目录的清晰性。
下面简述一下各类的用途:
AppDelegate: 程序入口,初始化Director类的参数,场景构建,布景层挂载
BulletLayer: 子弹层,用批量渲染技术加载子弹并维护子弹数据
BulletUserData: 子弹数据
EnemyLayer: 敌机层,加载敌机并维护敌机数据,检测敌机与子弹、敌机与我机及碰撞,并且调用对应接口
EnemyUserData: 敌机数据
GameBackgroundLayer: 布景层,实现地图加载,循环滚动
PlaneLayer: 飞机层,渲染飞机动画,响应用户滑屏操作
PlaneUserData: 飞机数据
UFOLayer: 不明飞行物层,目前用于投放武器加强的buff和大招buff
UFOUserData: 数据记录类,用于记录gift的类型
现在开始,分析一下系统自带的Helloworld程序的系统层次,在系统自带的Helloworld中,蕴含着一个很绕的逻辑关系,至今我也没发现这么设计有什么好处,我们先来看一下头文件:
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class HelloWorld : public cocos2d::Layer{ public: static cocos2d::Scene* createScene(); virtual bool init(); void menuCloseCallback(cocos2d::Ref* pSender); CREATE_FUNC(HelloWorld); }; #endif // __HELLOWORLD_SCENE_H__该Helloworld程序跑起来以后是这样的,Director -> scene -> layer ->sprite。但是Helloworld程序的调用步骤是这样的:初始化Director -> 利用layer的static函数构造一个scene -> 初始化layer -> sprite。 这么做会感觉逻辑比较绕,于是我就想了一个简单清晰的架构,直接由Director初始化scene,由scene初始化layer,由layer初始化sprite。这也是今后整个游戏框架的编写策略,这样从上至下地写,逻辑很清楚,不会乱。好了,这一篇的废话有点多了,下一篇开始要上干货了!
--------------------------------------------
本系列的博客的作品都会开源在github上:https://github.com/netbeen/flyingACE , 时时更新,欢迎大家star和fork,谢谢捧场!
某一关的测试视频demo:http://v.youku.com/v_show/id_XODgzNDQwNDgw.html?f=23404712&o=0
相关文章推荐
- 【零起步开发Cocos2dx-3.x-王牌飞行员(一)】为什么要开发cocos2d游戏
- 【零起步开发Cocos2dx-3.x-王牌飞行员(三)】素材文件的制作
- [原创]今天开发第一个三层结构模型的程序。
- 使用Eclipse RCP进行桌面程序开发(一):快速起步
- Visual C#编程入门之C#的结构 [程序开发其它程序]
- 普通管理类程序开发之难度系数、层次之说法,可以看看自己停留在哪个层次,不足之处,请大家一起补充
- 我开发51程序后自已总结的一个程序结构与思想
- 蛙蛙推荐:BS结构程序开发规范.doc
- 程序开发三层结构
- 普通管理类程序开发之难度系数、层次之说法(转自csdn)
- Multi-Tier结构程序开发基础教程
- 开发宝典:基于分布式对象的网游程序结构设计
- Visual C# 2008+SQL Server 2005 数据库与网络开发―― 2.1 程序结构
- C#.NET的N层结构程序开发思路(C# + Access带源代码)
- 《CSAPP》存储器层次结构:在程序中利用局部性
- C#.NET的N层结构程序开发思路(C# + Access带源代码)
- 开发宝典:基于分布式对象的网游程序结构设计
- 使用Eclipse RCP进行桌面程序开发(一):快速起步
- 《PL/SQL 语言开发参考手册》之二:PL/SQL 程序结构
- Multi-Tier结构程序开发基础教程 (二)