2016-03-21 18 views
-1

C++ ve SFML ile bir kule savunma oyunu yapıyorum. Haritayı yaptım, düşmanı hareket ettirdim ve biraz taret sınıfını yaptım. Taret, düşmana doğru dönmeli ve boşluk çubuğuna bastığımda ona ateş etmeli. Galiba dönüşümü güzel yaptım. Ateş ettiğimde merminin düşmana çarptığı yeri hesaplamak istiyorum, nasıl yaparım?Merminin nereden geldiğini tahmin edin

Bu benim şimdiki kodudur:

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)); 
} 

cevap

0

Sen ilk başta oyununuzda bir hit bizim için ne tanımlamak zorunda. Dikdörtgenler gibi bir şeye vurmak istiyorsanız, en kolay, ancak vuruşu kontrol etmenin en kötü yolu, bir şut çerçevesinin hareketini, bir şeye çarpıp vurmadığını veya sınırların dışına çıkıp çıkmadığını kontrol ederek “benzetmektir”. Sadece programlamada çok belirsiz olduğunuzda metot kullanın). Vuruşunu kontrol etmenin diğer, çok gelişmiş bir yolu bir raycast yapıyor. Mermi düz gittiğinden, bir çizgi oluşturur ve raycast, çarpıştırıcıyı bulmanızda size yardımcı olacaktır. Raycasting hakkında doğru bir öğretici here buldum, ancak sizi tatmin etmiyorsa, başka birini kolayca bulabilirsiniz. Bir merminin çarpışma yerini bulmak için her iki yol da sizi tatmin etmiyorsa, bir çeşit çizgi-dikdörtgen çarpışması ya da ihtiyaçlarınızı destekleyecek bir şey gibi bir şey uygulayabilirsiniz.

İlgili konular