使用SDL组织游戏代码

Organization of code for a game using SDL

本文关键字:游戏 代码 SDL 使用      更新时间:2023-10-16

我已经使用SDL好几天了,在遵循了一些教程后,我决定开始开发我自己的Galaga克隆。然而,我在试图为我的代码找到一个合适的布局时遇到了一些困难。

例如,我有一个太空船类定义如下:

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()[static class],因为我需要包含"game.h";,它基本上是主要的游戏类;太空船.h";,基本上创建了一个无限循环(我尝试过使用#ifndef等,但没有成功)。

有可能取得这样的结果吗?

EDIT:我找到了解决这个问题的方法(我只是在cpp文件中添加了"game.h",而不是在头文件中)。

如果只想存储指向这些对象的指针或引用,则可以使用class Game;class Spaceship;转发声明其中一个或两个类。如果他们将这些对象作为参数或返回它们(除了一些例外,afaik),这也是可以的。

如果你真的希望两者都有另一个的成员,那么这是不可能的,因为每个对象都会有自己的副本。

您需要打破依赖关系图中的循环。

例如,可以向您的太空船类添加一个字段,从而节省屏幕高度。