C++ 将不同对象的引用传递到构造函数中有一个对象的类中
我在大学里尝试编写一个游戏时遇到了一些问题。我有一个碰撞管理器类,它拥有与玩家和敌人的各种碰撞的函数。在这个类中,我有玩家和每个敌人的指针对象,所以我可以访问所涉及对象的各种碰撞响应成员函数。当我测试与玩家和每个敌人的碰撞时,这一切都很好,但是现在我正试图建立一个多敌人的等级,我在从碰撞检测器访问多个敌人时遇到了问题 我已经尝试过修剪脂肪,并且没有留下太多不重要的代码,但是我尝试做的一个例子是: 在标题中:C++ 将不同对象的引用传递到构造函数中有一个对象的类中,c++,object,constructor,C++,Object,Constructor,我在大学里尝试编写一个游戏时遇到了一些问题。我有一个碰撞管理器类,它拥有与玩家和敌人的各种碰撞的函数。在这个类中,我有玩家和每个敌人的指针对象,所以我可以访问所涉及对象的各种碰撞响应成员函数。当我测试与玩家和每个敌人的碰撞时,这一切都很好,但是现在我正试图建立一个多敌人的等级,我在从碰撞检测器访问多个敌人时遇到了问题 我已经尝试过修剪脂肪,并且没有留下太多不重要的代码,但是我尝试做的一个例子是: 在标题中: class CollisionManager { public: Colli
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类中的构造函数参数,将向量作为参数,然后从level类将敌人向量传递给它
这是我当前在级别文件中的内容:
在标题中
class Level : BaseLevel {
private:
CollisionManager collisions;
Player player;
Enemy* enemy;
//std::vector<Enemy> enemies;
//Enemy enemies[6];
}
类级别:基本级别{
私人:
碰撞管理器碰撞;
玩家;
敌人*敌人;
//病媒天敌;
//敌方(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();
}
}
Level::Level():
碰撞(玩家、敌人)
{
敌方=NULL;//我不确定是否有必要这样做?停止将其初始化为NULL指针
//如果敌人是向量而不是数组,请使用此选项
对于(int i=0;i<6;i++)
{
敌人。推回(敌人());
}
}
无效级别::更新(浮动dt)
{
for(int i=0;i
我调试了这个,它告诉我敌人是一个空PTR。我目前正在研究如何解决这个问题,但似乎找不到解决办法
我觉得我必须在这里遗漏一些基本的东西,但我一辈子都看不到如何解决这个问题,而不从CollisionManager类中获取所有功能并将其转储到级别中,以便所有人都可以访问它,但我不希望这样做
非常感谢您的帮助,我很高兴提供进一步的信息/代码。我设法修复了它。我完全错误地处理了这个问题--我没有在CollisionManager中使用指向对象的指针来访问其成员函数,而是将玩家和敌人的引用作为保存碰撞响应的函数的参数,然后在调用这些函数时,使用级别中的玩家和敌人对象作为参数。抱歉,如果这看起来很明显(现在对我来说是这样!),我对这一切还是很陌生的 请做一份报告。不要在问题中手动输入代码(这可能会产生类似
Class
的工件,带有大写字母C
等)。离线创建MRE并将其复制/粘贴到问题中。感谢您的回复!我相信我已经做到了。更好,但是在碰撞管理器的构造函数的初始值设定项列表中,您有敌人(en)
-但是碰撞管理器中没有敌人
成员变量(成员en
可能应该重命名为敌人
)。噢!但这并不是让我绊倒的原因——我有几种不同的敌人类型,所以我想为了这篇文章,我会把它们浓缩成敌人,而不是恶魔、骑士、僵尸等等,这似乎是不必要的细节。这个意图很好——但请举一个实际编译的最小示例(如果编译不是问题的话)在这个问题上。如果需要,将需要的部分粘贴到在线编译器(如)中。我们不需要将代码视为单个文件(如果这不是问题的一部分)。一个最小的代码块就可以了。