向有射程的敌人发射子弹

  • 本文关键字:敌人 发射 子弹 c++ sfml
  • 更新时间 :
  • 英文 :


每增加一点时间,每一座塔都会产生一颗子弹:

for (int i = 0; i < towerVec.size(); i++)
{
    Tower_shot tshot(&bulletTexture, sf::Vector2u(1, 3), towerVec[i].row);
    tshot.tower_shot.setPosition(towerVec[i].getPosX(), towerVec[i].getPosY());
    tshot.startingX = towerVec[i].getPosX();
    tshot.startingY = towerVec[i].getPosY();
    tshotVec.push_back(tshot);
}

然后每一颗子弹都被射出:

for (int j = 0; j < enemyVec.size(); j++)
{
    for (int i = 0; i < tshotVec.size(); i++)
    {
        if (tshotVec[i].ifFire(enemyVec[j].body.getPosition())) 
            tshotVec[i].fire(enemyVec[j].body.getPosition(), window);
    }
}

射击功能正在检查是否有射程到达敌人,如果没有,则尝试另一个。

bool Tower_shot::ifFire(sf::Vector2f EnemyPos)
{
    this->aimDir = sf::Vector2f(EnemyPos.x + 37 - this->tower_shot.getPosition().x, EnemyPos.y + 37 - this->tower_shot.getPosition().y);
    if (sqrt(pow(this->aimDir.x, 2) + pow(this->aimDir.y, 2)) < 250) return true;
    return false;
}
void Tower_shot::fire(sf::Vector2f EnemyPos, sf::RenderWindow &window)
{
    this->aimDir = sf::Vector2f(EnemyPos.x + 37 - this->tower_shot.getPosition().x, EnemyPos.y + 37 - this->tower_shot.getPosition().y);
    this->aimDirNorm = sf::Vector2f(this->aimDir.x / sqrt(pow(this->aimDir.x, 2) + pow(this->aimDir.y, 2)), this->aimDir.y / sqrt(pow(this->aimDir.x, 2) + pow(this->aimDir.y, 2)));
    this->currVelocity = this->aimDirNorm * this->maxSpeed;
    animation.Update(row);
    tower_shot.setTextureRect(animation.uvRect);
    window.draw(tower_shot);
    this->tower_shot.move(this->currVelocity);
}

问题是:子弹的行为很奇怪,就像子弹无法决定哪个敌人正在移动并试图移动到射程中的每个敌人。有什么线索如何处理吗?我被卡住了

我是这样做的:

https://github.com/dragneel30/Unnamed-TD-game/blob/master/Tower.h#L104

塔是应该决定发射哪个敌人的人,之后,它会创建一个子弹并将检测到的敌人传递给子弹,然后子弹将存储指向该敌人的指针,因此,您的子弹不会再表现得很奇怪了。 因为它已经知道要跟随哪个敌人(存储的敌人(

最新更新