2011-05-19 117 views
3

我正在研究一个微型游戏引擎的屏幕管理器,到目前为止,我找不到适合每个屏幕都使用“blob”来管理屏幕对象的解决方案。在需要一个控制器中的可渲染对象列表的情况下,blob是否可容忍?游戏画面管理

+0

Blob?原谅我,但你是什么意思blob? – Bart 2011-05-19 13:32:15

+0

http://en.wikipedia.org/wiki/God_object – Johnny 2011-05-19 13:35:03

+1

每个屏幕都必须由不同的所需资源管理组件组成,因此在您的情况下,每个屏幕都可以有一个可渲染的对象管理器对象,它封装并管理所有的可兑换物品,是否可靠的扑杀等等。我不太明白你在寻找什么答案,你是否想要一个适合你的屏幕和管理的结构,或者你想知道你是否可以管理它? – 2011-05-19 13:47:26

回答

1

我会考虑在这种情况下使用MVC pattern。否则,如果你不小心,很容易得到一堆意大利面代码,其中屏幕代码到达游戏代码,反之亦然。

+0

谢谢!这正是我迄今为止所要求的。我完全忘记了这种模式,但似乎我已经不知何故潜意识地将它嵌入代码中。谢谢你给我指导,这就是我想要的! – Johnny 2011-05-21 05:52:00

1

我最近编写了一些你可能称之为“屏幕管理器”的东西。

我开始时的想法是,无论我做什么游戏,渲染系统在渲染(如何管理硬件)方面都将基本相同。变化的东西是呈现的东西,以及如何绘制它(我想要一个盒子,一个圆圈或一个位图......代表什么......等等)。

所以基本上,“游戏状态”负责知道如何渲染自己,并且在从屏幕管理器或图形系统给出渲染表面时应该这样做(它也应该负责其他事情,例如知道输入,物理等行为本身)。

我的GraphicsSystem对象单身,这被称为是这样实现的:)

GameState gs; 
Graphics::System().Init(DOUBLE_BUFFER, 640, 480); 
... 
while(still_looping) { 
    ... 
    // When it is time to render: 
    Graphics::System().RenderGameState(&gs); 
} 

怎么样,你要问,图形::系统(单知道如何渲染游戏州?它知道,因为比赛状态从图形系统暴露的监听器继承了......

//within GraphicsSystem.h... 
class BaseRenderer 
{ 
public: 
    virtual void Render(BITMAP *render_surface) = 0; 
}; 

//GameState defined with: 
class GameState : public BaseRenderer 
{ 
public: 
    void Render(BITMAP *render_surface); 
    ... 

可以与几乎所有的子系统做到这一点......(很可能不是时机,因为它需要在比赛中循环)。

为什么单身?那么,它是C++,我假设只有1个屏幕或图形子系统来渲染。我不确定您是否使用多个屏幕,或者手机或控制台。另一种方式是将图形系统作为静态全局变量存放在一个单独的文件中,仅给出文件范围,并在该文件中具有访问函数(我的旧C方法)。

关键虽然是封装。让你的屏幕管理器管理硬件。让你的游戏状态决定如何表达自己。

如果这没有理解,请清除您的问题,我可以编辑答案。

+0

你的答案很有趣,虽然我确实已经设置了我的代码(并在这一点上工作),但我试图得到一个想法是一个好主意或不是,如果不是,你将如何管理当前呈现的对象。例如迈克所说的将是我的问题的答案。 – Johnny 2011-05-21 05:47:40