预测子弹击中的地方 我用C++和SFML制作了一个塔防游戏。我制作了地图,让敌人移动,还有一点炮塔等级。炮塔应该向敌人旋转,当我击中空格键时向它射击。我想我做的很好。当我射击时,我想让它计算子弹击中敌人的位置,我该怎么做

预测子弹击中的地方 我用C++和SFML制作了一个塔防游戏。我制作了地图,让敌人移动,还有一点炮塔等级。炮塔应该向敌人旋转,当我击中空格键时向它射击。我想我做的很好。当我射击时,我想让它计算子弹击中敌人的位置,我该怎么做,c++,sfml,C++,Sfml,这是我当前的代码: enemy->setOrigin(enemy->getGlobalBounds().width / 2, enemy->getGlobalBounds().height / 2); float degrees = atan2(this->getPosition().y - enemy->getPosition().y, this->getPosition().x - enemy->getPosition().x) * 180 / P

这是我当前的代码:

enemy->setOrigin(enemy->getGlobalBounds().width / 2, enemy->getGlobalBounds().height / 2);

float degrees = atan2(this->getPosition().y - enemy->getPosition().y, this->getPosition().x - enemy->getPosition().x) * 180 / PI;
degrees -= 90;

this->setRotation(degrees);

degrees -= 90;

if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Space) && !this->spaceKey){
    //Bullet: map, posX, posY, degrees, distance
    this->entityManager->Add("Bullet", new Bullet(this->map, this->getPosition().x, this->getPosition().y, degrees, 500));
}

首先,你必须为我们定义你的游戏中什么是成功。如果你想击中类似矩形的物体,检查命中的最简单但最糟糕的方法是“模拟”子弹的运动,逐帧检查子弹是否击中物体或超出范围(只有在你非常没有编程经验的情况下才应该这样做)。另一种更先进的检查命中的方法是进行光线投射。既然子弹是直的,它就形成了一条线,光线投射应该能帮助你找到对撞机。我找到了一个关于光线投射的适当教程,但如果它不能让您满意,您可以很容易地找到另一个。如果两种查找项目符号碰撞位置的方法都不能满足您的需要,您可以实现某种直线-矩形碰撞或类似的方法来支持您的需要