首页 > 解决方案 > 将不同对象的引用传递到一个类中,构造函数中有一个对象

问题描述

我在大学时尝试编写的游戏遇到了一些问题。我有一个碰撞管理器类,它包含与玩家和敌人发生各种碰撞的函数。在这个类中,我有玩家和每个敌人的指针对象,这样我就可以访问所涉及对象的各种碰撞响应成员函数。当我测试与玩家和每个敌人的碰撞时,这一切都很好,但是现在我正在尝试构建一个包含多个敌人的关卡,我在从碰撞检测器访问多个敌人时遇到了问题。

我试图减少脂肪并且不留下太多不重要的代码,但是我正在尝试做的一个例子:

在标题中:


class CollisionManager
{
public:

    CollisionManager(Player& play, Enemy* en);
    ~CollisionManager();

    void update();

private:
    Player* player;
    Enemy* enemy;
};

在 cpp 文件中


CollisionManager::CollisionManager(Player& play, Enemy* en) :
    player(&play),
    enemy(en)
{

}
void CollisionManager::update()
{
    // What happens when the enemy and the player collide under various circumstances
}

就像我说的,如果只有一个玩家和一个敌人,这很好用,但是如果我想要多个敌人,我怎样才能让他们都访问这些碰撞检测?

我尝试创建一个敌人数组或向量以及一个循环遍历各种敌人的敌人指针(在关卡类中)。

我尝试更改 CollisionManager 类中的构造函数参数以将向量作为参数,然后将敌人的向量从关卡类传递给它。

这是我目前在我的关卡文件中的内容:在标题中

class Level : BaseLevel {
private:
    CollisionManager collisions;
    Player player;
    Enemy* enemy;
    //std::vector<Enemy> enemies;
    //Enemy enemies[6];

}

两个敌人(数组和向量)将展示我尝试过的两个示例。

在 cpp 文件中:

Level::Level() :
    collisions(player, enemy)
{
    enemy = NULL; // I'm not sure if this is necessary? To stop it being initialized as a null pointer
    // Use this if enemies is a vector and not an array
    for (int i = 0; i < 6; i++)
    {
        enemies.push_back(Enemy());
    }
}
void Level::update(float dt)
{
    for (int i = 0; i < enemies.size(); i++)
    {
        enemy = &enemies[i];
        collisions.update();
    }
}

我对此进行了调试,它告诉我敌人是 NULLPTR。我目前正在研究如何解决这个问题,但似乎找不到解决方案。

我觉得我必须在这里遗漏一些基本的基础知识,但我一生都无法看到如何解决这个问题而不从 CollisionManager 类中获取所有功能并将其倾倒在关卡中以便它可以一切都可以访问,但我不想那样做。

非常感谢任何帮助,我很乐意提供更多信息/代码。

标签: c++objectconstructor

解决方案


我设法修复它。我以完全错误的方式解决了这个问题——我没有使用指向对象的指针来访问它们在 CollisionManager 中的成员函数,而是将玩家和敌人的引用作为参数包含在保存碰撞响应的函数中,然后使用调用这些函数时,将关卡中的玩家和敌人对象作为参数。抱歉,如果这看起来很明显(现在对我来说很明显!),我对这一切还是很陌生!


推荐阅读