c++ - 使用 SDL 组织游戏代码

标签 c++ sdl

我已经使用 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/

相关文章:

HTML 字体大小在嵌入式浏览器 (MFC) 中发生不可预测的变化

c++ - 如何识别抛出的特定异常

c++ - rapidxml 在 wchar_t 内容上抛出异常

c++ - C++ 中不明确的函数重载

c++ - 如何在二维粒子系统中实现方向?

c++ - SDL PollEvent() 从不返回任何内容

Sprite 之间的 C++ SDL 碰撞

c++ - 速度和动量 - 我无法走远

qt - qDebug 和 SDL 之间的冲突

common-lisp - 无法在 quicklisp 中加载 sdl-gfx