【发布时间】:2012-01-13 21:19:30
【问题描述】:
我已经使用 SDL 几天了,在学习了一些教程后,我决定开始开发我自己的 Galaga 克隆。但是,我在为我的代码找到合适的布局时遇到了一些困难。
例如,我有一个 Spaceship 类,定义如下:
class Spaceship : public Sprite
{
public:
Spaceship(SDL_Surface *surface);
Spaceship(const char *filename);
void handleEvent(SDL_Event *event);
};
其中 Sprite 是一个基类,用于保存屏幕上的位置等。 我的构造函数是这样的:
Spaceship::Spaceship(SDL_Surface *surface) :
Sprite(surface)
{
m_y = Game::screenHeight() - m_surface->h; //positions the ship at the bottom
}
据我所知,无法使用 Game::screenWidth() [静态类],因为我需要包含“game.h”,它基本上是主要的游戏类并包含“spaceship.h” ",基本上创建了一个无限循环(我尝试使用 #ifndef 等但没有成功)。
有没有可能达到这样的效果?
编辑:我找到了解决问题的方法(我只是在 cpp 文件中而不是在头文件中添加了“game.h”包含)。
【问题讨论】:
-
我通常通过避免“主游戏类”来解决“主游戏类”问题。解决这个问题的一种方法是让你的 main 函数 实例化你需要的所有项目,然后使用依赖注入将每个类需要的位传递给每个类,而不是依赖于静态状态(有效全局变量)。
-
“我如何设计一个项目”是一个相当广泛的问题,但你基本上做对了(在做一个学习项目时,设计代码的方式真的没有对错之分)
-
@MerlynMorgan-Graham 谢谢,我也会评估这种方法