0

所以我有一个任务,要求我使用八叉树进行碰撞计算,在播放器对象和对象(立方体/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 才能访问它。我在我的课程中问过我的一位朋友他有什么,他的几乎和我的一模一样,这引发了一些问题。如果需要更多信息,请告诉我。

4

1 回答 1

0

如果源文件使用头文件中声明的内容,则将该头文件包含在源文件中,即使它也包含在另一个源文件中。使用包含守卫来确保您不会重新声明任何内容。

于 2013-03-01T20:49:41.330 回答