我正在为自己的游戏制作真正的开始构建一个简单的通用引擎,并且我试图以某种方式组织起来并在制作引擎时做到体面,这意味着我不希望它成为我抛弃的东西。一旦我完成了计划。
我添加了要显示的对象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;
[假设它首先被分配了]。
请注意,将变量保留为未初始化状态意味着它可以在有效范围内(对于某些类型,可以在有效范围外-例如,指针和浮点值可以是“处理器不允许的值”]。这意味着不可能在代码内“告诉”代码是否已初始化-但是,如果不初始化代码,事情将变得非常错误!