我已经使用 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”,而不是在头文件中)。
最佳答案
如果您只想存储指向这些对象的指针或引用,则可以使用 class Game;
或 class Spaceship;
前向声明一个或两个类.如果他们将这些对象作为参数或返回它们(除了一些异常(exception),afaik),这也很好。
如果您真的希望两者都拥有对方的成员,那么这是不可能的,因为每个对象都将在其中拥有其自身的拷贝。
关于c++ - 使用 SDL 组织游戏代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8857376/