我正在使用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 / 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));
}
答案 0 :(得分:0)
首先,您必须为我们定义游戏中的热门内容。如果你想击中像矩形这样的东西,最简单但最糟糕的检查命中方法是模拟'子弹框架通过框架的运动检查它是否碰到某种东西或者是否超出界限(只有在编程中你没有看到它时才应该这样做)。检查命中的其他更先进的方法是进行光线投射。由于子弹是直的,它形成一条线,而光线投射应该可以帮助你找到对撞机。我找到了关于光线投射的正确教程here,但是如果它不能满足你,你可以很容易地找到其他的。如果找到子弹的碰撞位置的两种方式都不能满足你的要求,你可以实现某种线矩形碰撞或类似的东西来支持你的需要。