所以我以为我有将参考文献传承下来的想法,但似乎我仍在为之努力。

这是我的问题,我已经调试了一段时间的游戏,而且我的代码的敌人部分已经很久没有修改了。这是一个很长的故事,但我认为我的弹丸对敌人造成了伤害,我将敌人的生命值提高到很高,所以我认为他们在造成伤害,但由于它的健康状况很高,所以并没有杀死它。直到现在我才意识到他们没有造成任何损害,并且代码是错误的:/

所以这是我开始的地方:

void Towers::Update(std::vector<Enemies>& enemies, SDLib& lib, Map cMap)

在这里,我通过引用将敌人传递到我的更新函数中。然后我继续去看那座塔的范围内是否有敌人。
for (int numOfEnemies = 0; numOfEnemies < lib.numberOfEnemies; numOfEnemies++)
{
    float y =  pow(enemies[numOfEnemies].position.y - position.y, 2);
    float x = pow(enemies[numOfEnemies].position.x - position.x, 2);

    if (sqrt(y + x) < range && enemies[numOfEnemies].alive)
    {
        cEnemy = enemies[numOfEnemies];
        acquiredTarget = true;
        break;
    }
}

cEnemy(currentEnemy),然后控制范围内的敌人。在此之后,我创造了要发射的子弹,这就是我想搞砸了。
bullet = Projectile((float)position.x, (float)position.y - 8, 8, 8, 0, 0, damage, 1, speed, cEnemy);

并且函数的参数为​​:
Projectile::Projectile(float x, float y, int w, int h, int sX, int sY, int dmg, int type, float mxSpeed, Enemies bulletTarget)
{
     //....other values set.
     target = bulletTarget;
}

(目标如下)
Enemies target;

这里的想法是目标应该保留对我通过函数将其设置为的初始敌人的引用...但是它不能按我的意愿工作。
我不太确定,但是我猜这里可能需要某种形式的指针。我似乎最难以理解的概念似乎已经囊括了所有的东西,并且已经有一段时间了。

任何帮助表示赞赏!

最佳答案

您正在复制Enemies对象:

  • cEnemy = enemies[numOfEnemies];
  • 将值传递给Projectile构造函数时,因为它按值接受Enemies
  • target = bulletTarget;

  • 要修复所有这些问题,您需要考虑哪些代码“拥有”了Enemies对象,并确保它对于所有尝试使用它的代码都有足够长的生命。如果有这样的地方,则所有其他地方都应使用引用或指针。如果没有,也许您可​​以将责任交给shared_ptr<Enemies>

    10-08 14:47