【发布时间】:2009-03-02 00:31:20
【问题描述】:
我正在开发一款游戏,目前正在开发处理输入的部分。这里涉及三个类,ProjectInstance 类启动关卡和东西,GameController 将处理输入,PlayerEntity 将受GameController 确定的控件影响。在启动关卡时,ProjectInstance 会创建GameController,它会在游戏循环中调用的 Step 方法中调用其EvaluateControls 方法。 EvaluateControls 方法看起来有点像这样:
void CGameController::EvaluateControls(CInputBindings *pib) {
// if no player yet
if (gc_ppePlayer == NULL) {
// create it
Handle<CPlayerEntityProperties> hep = memNew(CPlayerEntityProperties);
gc_ppePlayer = (CPlayerEntity *)hep->SpawnEntity();
memDelete((CPlayerEntityProperties *)hep);
ASSERT(gc_ppePlayer != NULL);
return;
}
// handles controls here
}
这个函数被正确调用并且断言永远不会触发。但是,每次调用此函数时,gc_ppePlayer 都会设置为 NULL。如您所见,它不是超出范围的局部变量。 gc_ppePlayer 可以设置为 NULL 的唯一位置是在构造函数中或可能在析构函数中,在调用 EvaluateControls 之间都不会调用它们。调试时,gc_ppePlayer 在返回之前收到正确的预期值。当我再次按 F10 并且光标位于右括号时,该值变为 0xffffffff。我在这里不知所措,怎么会发生这种情况?有人吗?
【问题讨论】: