游戏画面管理
Game screen management
我正在为微型游戏引擎开发屏幕管理器,到目前为止,如果不为每个屏幕使用"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 做事方式)。
关键是封装。让您的屏幕管理器管理硬件。让你的游戏状态决定如何表达自己。
如果这没有抓住重点,请清除您的问题,我可以编辑答案。
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 在C++游戏中与库存系统作斗争
- 如何维护资源管理器项目视图中当前可见的项目列表
- 换位表导致测试失败(但在游戏中运行良好)
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 资源管理设计模式
- 使用"Task"函数指针队列定义作业管理器
- Craps游戏问题,忽略if语句
- 矢量下标超出SFML游戏中的范围
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 实现动态插件管理器
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- libcurl 和 DNS ttl 中的内部连接管理
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- 如何简单地管理我的游戏状态?C++
- 我的多线程游戏始终为100%CPU.如何管理线程活动以减少CPU负载
- 事件管理器中游戏的迭代程序在注销时失效
- 在C++游戏中使用资源管理器的singleton
- Cocos2d-x -游戏设计中的对象创建和管理
- 游戏画面管理