所以我有一个任务,要求我在Player对象和一个Object(一个多维数据集/ pyrmaid / sphere真的无关紧要)之间发生碰撞,使用Octree进行碰撞计算。在Player与Object碰撞时,需要删除该对象。我有这样的功能
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 *播放器在Game.h中,但我需要binPart才能访问它。我问过我的一个朋友,我的课程是什么,他和我的几乎完全一样,提出了问题。如果需要更多信息,请告诉我。
答案 0 :(得分:0)
如果源文件使用头文件中声明的内容,请在源文件中包含该头文件,即使它也包含在另一个源文件中。使用包含警戒以确保您不会重新声明任何内容。