2016-03-21 5 views
-1

私は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

あなたは、最初は、あなたのゲームでヒットが何であるかを私たちのために定義する必要があります。矩形のようなものを打ちたい場合は、最も簡単ですが、ヒットをチェックする最悪の方法は、弾丸フレームの動きをフレームでチェックして、何かが当たったかどうかをチェックすることです。あなたがプログラミングで非常に不明瞭な場合にのみメトト)。ヒットをチェックするその他の高度な方法は、レイキャストを行うことです。弾丸はまっすぐ進むので、それはラインを形成し、レイキャストはあなたがコライダーを見つけるのを助けるはずです。私はレイキャスティングについて適切なチュートリアルhereを見つけましたが、それがあなたを満足させなければ、他のものを簡単に見つけることができます。弾丸の衝突場所を見つける両方の方法があなたを満足させない場合は、あなたのニーズをサポートするような何らかの線の四角形の衝突などを実装できます。