游戏画面管理

Game screen management

本文关键字:管理 游戏画面      更新时间:2023-10-16

我正在为微型游戏引擎开发屏幕管理器,到目前为止,如果不为每个屏幕使用"blob",我找不到管理屏幕对象的合适解决方案。在我需要在一个控制器中列出可呈现对象的情况下,是否可以容忍 blob?

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

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

一开始的想法是,无论我制作什么游戏,渲染系统在如何渲染(如何管理硬件)方面几乎是一样的。改变的是渲染的内容,以及如何绘制它(我想要一个盒子、一个圆圈还是一个位图......等)。

所以基本上"游戏状态"负责知道如何渲染自己,并且应该在屏幕管理器或图形系统给出渲染表面时这样做(它还应该负责其他事情,比如知道输入、物理等如何作用于自己)。

我用一个 GraphicsSystem 对象的单例实现了它,它被称为这样的东西:

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

你问,Graphics::System() 单例如何知道如何渲染游戏状态?它知道,因为游戏状态是从图形系统公开的侦听器继承的......

//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 做事方式)。

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

如果这没有抓住重点,请清除您的问题,我可以编辑答案。