向敌人射击子弹,它有射程

时间:2018-04-09 16:18:04

标签: 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);
}

问题是:子弹行为很奇怪,就像子弹可以决定哪个敌人正在移动并试图移动到范围内的每个敌人。任何线索如何处理?我被困了

1 个答案:

答案 0 :(得分:0)

我就这样做了:

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

塔是谁应该决定射击哪个敌人,之后,它将制造一颗子弹并将检测到的敌人传递到子弹,然后子弹将存储指向该敌人的指针,因此,你的子弹不会再怪异了。因为它已经知道要跟随哪个敌人(存储的敌人)