我目前正在使用 SFML 开发 2D 游戏引擎,并从程序上开始,但我决定将其移至 OOP 从长远来看会更好。我理解 OOP 的概念,但是,我不确定我应该在哪里定义我对其他类(ImageManager、Grid 等)的实例化
例如,我的Engine
类依赖于ImageManager
,并且其中的许多函数Engine
依赖于来自 的变量ImageManager
。因此,我不能简单地ImageManager
在单个函数中声明和定义类的实例,因为它在其他函数中不可用。
我所做的是:Engine.h:
class Engine
{
private:
sf::RenderWindow window;
grid (*gridArray)[SIZE];
...//more variables, removing for length
//Initializes the engine
bool Init(); //Main Game Loop
void MainLoop(); //Renders one frame
void RenderFrame(); //Processes user input
void ProcessInput(); //Updates all Engine internals
public:
Engine(int w, int h, int tileSize);
~Engine();
ImageManager * imageManager;
GridClass * gridClass;
...//removed some methods for length
};
所以基本上,你可以看到我在标题中声明了两个类,ImageManager
并且GridClass
. Engine.cpp 内部:
Engine::Engine(int w, int h, int tileSize)
{
imageManager = new ImageManager;
gridClass = new GridClass();
gridArray = new grid[SIZE][SIZE]();
masterArray = new unsigned char[MAP_SIZE][MAP_SIZE];
videoSize = sf::Vector2i(w, h);
this->tileSize = tileSize;
startX = startY = endX = endY = 0;
}
我正在定义类。我在构造函数中这样做,因为我不确定我应该在哪里做,以符合良好的做法。我一直对imageManager
损坏的元素有问题,所以我想知道我这样做的方式是否是个坏主意。
如果这是一个坏主意,你能告诉我应该在哪里实例化这些类吗?请记住,Engine 中的许多函数都依赖于这些类的这些实例中的变量,我真的不想向每个函数传递大量参数。
谢谢。