所以我有一个任务,要求我使用八叉树进行碰撞计算,在播放器对象和对象(立方体/pyrmaid/球体真的无关紧要)之间发生碰撞。在玩家与对象发生碰撞时,需要删除对象。我有这样的功能
void BinPart::ProcessCollisions(int &nbrTests, int &nbrCollisions){
if(hasChildren())
{
for(int i = 0; i <= 7; i++)
{
child[i]->ProcessCollisions(nbrTests, nbrCollisions);
}
}
int n = objects.size();
if(n >= 2)
{
for(int i = 0; i < n - 1; i++)
{
for(int j = i + 1; j < n; j++)
{
nbrTests++;
if(player->collidesWith(objects[j]))
{
objects.erase(objects.begin() + j);
}
else
{
if(objects[i]->collidesWith(objects[j]))
{
nbrCollisions++;
}
}
}
}
}
if(n >= 1 && parent != NULL)
{
parent->ProcessBorderCollisions(this, nbrTests, nbrCollisions);
}
}
目前player->collidesWith(objects[j]);
不起作用,因为在 binPart 的头文件中播放器是“未定义的”,有一个 Object 类型的基类的前向声明,所有对象都是由该基类制成的。但是 Object *player 在 Game.h 中,但我需要 binPart 才能访问它。我在我的课程中问过我的一位朋友他有什么,他的几乎和我的一模一样,这引发了一些问题。如果需要更多信息,请告诉我。