一个简单的游戏开发框架(四.舞台Stage)
首先是StageManager类:
class StageManager : public Singleton<StageManager>
{
friend class Singleton<StageManager>;
private:
StageManager() : _curStage(), _pStageCreator(nullptr) {}
~StageManager(); public:
bool InitStageManager();
Stage* SwitchStage(uint32 stageID, bool bDestroyOld); void SetStageCreator(StageCreator* pCreator) { _pStageCreator = pCreator; } Stage* GetStageByID(uint32 stageID);
Stage* GetCurStage() { return GetStageByID(_curStage); } private:
std::map<uint32, Stage*> _stages;
uint32 _curStage;
StageCreator* _pStageCreator;
};
这个类的功能是:
1.管理Stage的生存期
2.作为单件,提供访问Stage的入口
3.接收并处理相关事件
它主要的操作是SwitchStage,首先判断Stage是否存在,如果不存在,创建,加载并显示它,并且根据bDestroyOld参数,决定是否释放前一个Stage的资源。
舞台类Stage如下:
class Stage
{
public:
Stage() : _bLoaded(false) {}
virtual ~Stage(); public:
/// 向舞台加入对象
virtual bool Add2Stage(Object* pObj);
/// 加载舞台
virtual void LoadStage(uint32 stageID);
/// 心跳
virtual void StageTick(); public:
bool IsLoaded() { return _bLoaded; } protected:
bool _bLoaded;
std::vector<Object*> _objs;
};
这个类的功能是:
1.加载舞台对象,管理对象生存期。
在游戏初始化的时候,会读入一个类似下面的资源文件:
<Stages>
<Stage id = "1", file="stage1.xml" />
<Stage id = "2", file="stage2.xml" />
……
</Stages>
stageN.xml的结构也很简单:
<Stage>
<Object type="npc" file="object1.xml">
<Object type="npc" file="object2.xml">
……
</Stage>
StageManager和Stage根据这两个文件加载舞台和舞台上的对象。
2.以适当的方式加载和显示地图。目前比较常见的地图加载方式有tilemap,整图加载,整图切片加载等,这些处理都被封装在Stage内部。随着项目需求的变化,会逐渐增加StageTileMap,StageWhole等派生类,服务器和客户端使用的Stage类也可能有所不同。但是StageManager并不知道应该创建哪一类Stage,为此需要增加一个抽象工厂:
class StageCreator
{
public:
virtual ~StageCreator() {} virtual Stage* CreateStage() = ;
virtual void ReleaseStage(Stage* pStage) = ;
};
逻辑层需要实现该工厂,以指定创建的Stage类别。
下面是一个简单的,基于cocos2d,整图加载,以指定角色为中心移动的Stage:
class StageView : public Stage
{
public:
StageView() : _pCenter(nullptr), _pScene(nullptr), _pLayer(nullptr) {} public:
virtual bool InitStage();
virtual bool Add2Stage(Object* pObj);
virtual void LoadStage(uint32 stageID);
virtual void StageTick(); public:
/// 以pObj为中心显示舞台
void CenterStage(Object* pObj);
/// 指定舞台的中心对象
void SetCenter(Object* pObj) { _pCenter = pObj; } public:
cocos2d::CCScene* Scene() { return _pScene; } protected:
Object* _pCenter;
cocos2d::CCScene* _pScene;
StageLayer* _pLayer;
};
一个简单的游戏开发框架(四.舞台Stage)的更多相关文章
- 一个简单的游戏开发框架(七.动作Motion)
发现还没谈到最基本也是最重要的问题,怎么画图,画动画? 在原版cocos2d-x里画动画比较麻烦,见cocos2d-x学习笔记04:简单动画 cocostudio扩展出CCArmature类,就比较简 ...
- 一个简单的游戏开发框架(五.对象Object)
前面提到我们把行为Action从对象Object中分离了出来,用各种不同的行为组合出对象的功能.大家都知道,面向对象的一个类,就是数据和操作的集合.操作(行为)被分离出来了,数据怎么办呢?操作依赖的数 ...
- 一个简单的游戏开发框架(六.行为Action)
Action是cocos2d-x中比较重要的概念,有一个庞大的类族.参见老G写的cocos2d-x学习笔记09:动作2:持续动作 除了各种包装器,剩下的主要是一些持续动作: CCMoveTo:移动到. ...
- Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务、WCF消息头添加安全验证Token
原文:Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务.WCF消息头添加安全验证Token 为什么选择wcf? 因为好像wcf和wpf就是哥俩,,, 为什么选择异步 ...
- 5、使用Libgdx设计一个简单的游戏------雨滴
(原文:http://www.libgdx.cn/topic/49/5-%E4%BD%BF%E7%94%A8libgdx%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E7% ...
- Prism for WPF 搭建一个简单的模块化开发框架(五)添加聊天、消息模块
原文:Prism for WPF 搭建一个简单的模块化开发框架(五)添加聊天.消息模块 中秋节假期没事继续搞了搞 做了各聊天的模块,需要继续优化 第一步画页面 页面参考https://github.c ...
- Cocos2d-x-Lua 开发一个简单的游戏(记数字步进白色块状)
Cocos2d-x-Lua 开发一个简单的游戏(记数字步进白色块状) 本篇博客来给大家介绍怎样使用Lua这门语言来开发一个简单的小游戏-记数字踩白块. 游戏的流程是这种:在界面上生成5个数1~5字并显 ...
- Prism for WPF 搭建一个简单的模块化开发框架 (一个节点)
原文:Prism for WPF 搭建一个简单的模块化开发框架 (一个节点) 这里我就只贴图不贴代码了,看看这个节点之前的效果 觉得做的好的地方可以范之前的文章看看 有好的建议也可以说说 填充数据 ...
- Prism for WPF 搭建一个简单的模块化开发框架(六)隐藏菜单、导航
原文:Prism for WPF 搭建一个简单的模块化开发框架(六)隐藏菜单.导航 这个实际上是在聊天之前做的,一起写了,也不分先后了 看一下效果图,上面是模块主导航,左侧是模块内菜单,现在加一下隐藏 ...
随机推荐
- Linux进程管理
一.进程管理简介 进程是正在执行的程序或命令,每一个进程都是一个运行实体,都有自己的地址空间,并占用一定的系统资源. 进程管理的作用: 1.判断服务器的健康状态 2.查看系统中的所有进程 3.杀死进程 ...
- mutation annovar
1.annovar 很全面 http://annovar.openbioinformatics.org: 2.http://blog.goldenhelix.com/:
- JVM 新生代老年代
1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...
- [bzoj1122][POI2008]账本BBB
1122: [POI2008]账本BBB Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 402 Solved: 202[Submit][Status ...
- [转载]自己编写 php 在线问卷调查程序
<html> <head> <title>问卷调查</title> <meta http-equiv="Content-Type ...
- language model —— basic model 语言模型之基础模型
一.发展 起源:统计语言模型起源于 Ponte 和 Croft 在 1998年的 SIGIR上发表的论文 应用:语言模型的应用很多: corsslingual retrieval distribute ...
- 深入理解BFC和外边距合并(Margin Collapse)
一.什么是BFC? 1.BFC的概念 BFC全称Block Formatting Context ,直译“块级格式化上下文”,也有译作“块级格式化范围”.它是 W3C CSS 2.1 规范中的一个概念 ...
- Evolutionary Computing: 5. Evolutionary Strategies(1)
resource: Evolutionary computing, A.E.Eiben Outline What is Evolution Strategies Introductory Exampl ...
- MR21、MR22和CK24的区别
MR21和CK24都是用于修改物料标准价,但两者功能和用法上有所区别:MR21是直接更改单价, CK24是在CK11N或CK40N价格评估的基础上的价格核发, CK24记录价格评估, 价格评估在做 ...
- flask笔记3-模板
flask框架使用jinja2模板引擎.简单的说,模板就是一个纯html文件中夹杂着占位符,在渲染模板时用真实变量值替换占位符,就形成了最终的前台页面. 1.模板存放位置: 默认情况下,flask在根 ...