我正在为自己的游戏制作真正的开始构建一个简单的通用引擎,并且我试图以某种方式组织起来并在制作引擎时做到体面,这意味着我不希望它成为我抛弃的东西。一旦我完成了计划。

我添加了要显示的对象drawObject,这些对象可以移动,不移动,具有动画或没有动画。

如果他们确实有动画,我想初始化一个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个小时?或者更多。
谢谢!

最佳答案

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

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

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

请注意,将变量保留为未初始化状态意味着它可以在有效范围内(对于某些类型,可以在有效范围外-例如,指针和浮点值可以是“处理器不允许的值”]。这意味着不可能在代码内“告诉”代码是否已初始化-但是,如果不初始化代码,事情将变得非常错误!

08-05 14:56