0

我正在为我的游戏制作真正开始构建一个简单的通用引擎,并且我正在尝试以某种方式组织和体面地制作我的引擎,这意味着我不希望它成为我扔到一边的东西一旦我完成了我的计划。

我添加要显示的对象,drawObjects,这些对象可以移动,也可以不移动,并且有动画,或者没有动画。

如果他们确实有动画,我想初始化一个animationSet,它里面animationSet会有 xxx 。animationComp由于我试图保持整洁并且一直致力于对内存和 cpu 使用的“优化”(例如共享已加载的图像指针,以及我想到的任何东西),我不想在数组中要求可能未使用的内存.

所以我animationSetS* animationSet = NULL;最初计划只在需要我添加的动画的对象上做一个animationSet = animationSetS[spacesINEED];,即那些不是动画的对象NULL,因此不使用内存(对吗?)。然后就出现了这个问题!(标题)

    struct animationComp {
        SDL_Rect* clip;
        int clipsize;
    };

    struct animationSetS {
        animationComp* animation;
        int currentFrame;
        int currentAnimation;
        int animationNumber;
    };

    struct drawObject { // Um objecto.
        char* name;
        SDL_Surface* surface;
        bool draw = true;
        float xPos;
        float yPos;
        bool willMove = false; // 0 - Won't move, 10 - Moves alot, TO IMPLEMENT
        bool isSprite = false;
        animationSetS* animationSet;
    };

我涉猎了很多问题,对此感到抱歉。对于此处的任何澄清回复,我将在接下来的 10 分钟内回复……也许 1 小时?或者更多。谢谢!

4

2 回答 2

3

将指针设置为 NULL 意味着您将能够添加ASSERT(ptr != NULL);并知道您的指针不会意外包含来自它正在使用的内存中的任何垃圾值。

因此,如果由于某种原因,您最终在正确设置对象之前使用了该对象,您可以检测到它。

如果您有时不使用字段,它也有帮助,您仍然可以调用delete stuff;[假设它首先被分配]。

请注意,使变量保持未初始化意味着它可以在其有效范围内具有任何值[对于某些类型,在有效范围之外-例如指针和浮点值可以是“处理器不允许的值”]。这意味着不可能在代码中“判断”它是否已初始化——但如果你不初始化,事情就会变得非常糟糕!

于 2012-12-25T23:04:48.933 回答
3

如果这真的应该在 C++ 中实现(正如你所写的那样),你为什么不使用 C++ 标准库呢?喜欢

struct animationSetS {
    std::vector< std::shared_ptr<animationComp> > animation;
    // ...
}
于 2012-12-25T23:12:20.190 回答