我有一个游戏。游戏本身就是一个类。
我的游戏中有几行专门用于显示调试信息:
RECT rct;
rct.left = 10;
rct.right = 780;
rct.top = 10;
rct.bottom = screen.GetWindowHeight() - rct.top;
std::string debugStringResult;
std::stringstream debugString;
debugString << "Mouse X: " << mouse.GetMouseX() << ",\nMouse Y: " << mouse.GetMouseY() << ",\nLeft mouse down: " << mouse.LeftMouseDown() << ",\nRight mouse down: " << mouse.RightMouseDown() << ",\nScreen width: " << screen.GetScreenWidth() << ",\nScreen height: " << screen.GetScreenHeight() << "\nSystem resolution: " << screen.GetWindowWidth() << " x " << screen.GetWindowHeight();
debugStringResult = debugString.str();
font.handle->DrawText( NULL, debugStringResult.c_str(), -1, &rct, 0, font.color );
此代码目前在我的游戏绘图循环中。懒惰是不是:)
所以我现在想声明一个变量,这样我就不会为我的 rct 及其位置属性以及我正在使用“debugStringResult”和“debugString”的字符串重新声明内存。不那么懒惰:)
我决定使用上述变量和几个方法创建一个名为 Debug 的类。我意识到我必须在我的 Game 类中创建一个变量以允许创建一个实例
Debug debug;
然后我意识到我必须将鼠标、屏幕和 gfx(用于实际绘制到屏幕部分)类引用传递给调试,以便调试类将它们输出到屏幕。
Game::Game( HWND hWnd, const MouseServer &mouseServer, const ScreenServer &screenServer )
: mouse( mouseServer ),
screen( screenServer ),
gfx( screen, hWnd ),
font( gfx ),
viewport( screen, gfx ),
debug( gfx, mouse, screen )
{
然后它击中了我。为什么我不在我的 Game 类中创建一个名为 Debug() 的函数,它包含之前的代码以及 rct 和其中的内容。但后来我意识到,在我的游戏类中,我现在需要声明 rct、debugString 和 debugResult 的变量......老实说,这与我的游戏无关,它们与调试我的游戏有关......所以我庞大的游戏变量列表变得越来越大......
毕竟我的问题是:
如果您想要一组可以访问游戏类中使用的所有变量的调试相关的东西,你们会怎么做。
你让它成为游戏类的朋友吗?
您是否只是咬紧牙关继续将所有类传递给调试构造函数?
您是否在全局范围内声明您的鼠标、键盘、屏幕和图形,以便您可以在任何地方访问它们?我认为不是因为您需要观看该项目,因此调试起来更加困难。
您是否创建了一种“其他”类并将所有奇怪的时髦杂项批量放入其中,例如 Debug
您是否创建了一个类来作为对最终通过很多的类的一组引用......?这样我就不需要将我需要的特定内容传递给我的视口和调试类,而是通过“引用”,这是我将创建的一个类,它包含来自我的游戏构造函数的引用?
我只是不知道其他人在做什么,并且越来越难以致力于我的做事方法?