• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tower Defense - strzelanie do potworów

VPS Starter Arubacloud
0 głosów
303 wizyt
pytanie zadane 2 października 2017 w C i C++ przez L33TT12 Gaduła (3,950 p.)

Witam, jestem o krok od skończenia mojego najnowocześniejszego projektu, na sam koniec pozostawiłem mianowicie strzelanie wieżyczek do potworów, otóż obecnie mam to zaimplementowane ale coś jednak jest nie tak bo pocisk raz trafi w cel, a raz nie, szukałem w internecie ale chyba szukać nie umiem, tak więc mianowicie, jeśli mam podane następujące dane:
Pozycje potwora
Pozycja wieżyczki
Prędkość pocisku
to jak w takim razie obliczyć gdzie ta wieżyczka ma strzelić? Jesli pocisk byłby wystarczająco szybki to wystarczyłoby strzelić w pozycje potwora, ale zanim tam pocisk doleci to potwór będzie gdzie indziej, tak więc jak to policzyć? Dodam że otrzymywanie pozycji potwora po czasie X mam już zaimplementowane jakby się to przydało, obecnie wygląda to u mnie tak, ale tak jak wspomniałem coś tu nie działa ;//

       sf::Vector2f enemyPos = m_unique.m_enemy->GetProporties()->m_position;
        m_unique.m_position = l_tower->GetPosition();
        m_unique.m_tick = enemyPos - m_unique.m_position;
        float seconds = abs((abs(m_unique.m_tick.x) > abs(m_unique.m_tick.y) ? m_unique.m_tick.x : m_unique.m_tick.y)) / l_tower->GetUpgradeProporties().m_bulletSpeed;

        enemyPos = m_unique.m_enemy->GetPositionAfter(seconds);

        m_unique.m_tick = enemyPos - m_unique.m_position;
        seconds = abs((abs(m_unique.m_tick.x) > abs(m_unique.m_tick.y) ? m_unique.m_tick.x : m_unique.m_tick.y))/ l_tower->GetUpgradeProporties().m_bulletSpeed;
        m_unique.m_timeToHitTarget = seconds;
        m_unique.m_tick.x /= seconds;
        m_unique.m_tick.y /= seconds;

oraz poruszanie pocisku
 

    m_unique.m_position.x += m_unique.m_tick.x * l_dT;
    m_unique.m_position.y += m_unique.m_tick.y * l_dT;
    m_unique.m_timeToHitTarget -= l_dT;
    if(m_unique.m_timeToHitTarget <= 0.f && m_unique.m_enemy){
        m_unique.m_enemy->OnBulletHit(this);
        m_manager->RemoveBullet(this);
    }

 

1 odpowiedź

0 głosów
odpowiedź 2 października 2017 przez Patrycjerz Mędrzec (192,340 p.)
W grach typu tower defence właśnie chodzi o to, aby wieżyczka strzelała tam, gdzie potwór był w momencie wystrzału. Jeśli każdy pocisk będzie trafiał we wroga, to zmniejszy to jedynie frajdę z gry.
komentarz 2 października 2017 przez L33TT12 Gaduła (3,950 p.)
Ale przecież chyba w każdym(przynajmniej ja sie nie spotkałem z TD gdzie wieżyczka nie trafia we wroga) TD wieżyczka trafia we wroga. Załóżmy że mam zamiar zrobić wieżyczkę która ma globalny zasięg, i strzela w potwora która jest na drugim końcu mapy, więc jeśli strzeli w jego pozycje w momencie wystrzału, aby pocisk trafił w potwora, to będzie on tak szybki że gracz nawet nie zobaczy wystrzelonego pocisku, a jeśli pocisk ma być wolniejszy to musze obliczyć pozycję potwora po jakimś czasie aby to ładnie wyglądało, a nie że pocisk dolatuje do końca mapy, potwór już w połowie i nagle ginie
komentarz 2 października 2017 przez 10kw10 Pasjonat (22,880 p.)
moze sprawdzaj pozycje powtora po kazdym ruchu pocisku ?
komentarz 2 października 2017 przez L33TT12 Gaduła (3,950 p.)
Takie coś mam w planach zaimplementować, ale to dla rakiety, a zwykły pocisk chciałbym by od razu leciał w docelowe miejsce
komentarz 2 października 2017 przez 10kw10 Pasjonat (22,880 p.)
to bierzesz tylko raz pozycje potwora, w momencie strzalu.

Podobne pytania

+2 głosów
0 odpowiedzi 611 wizyt
pytanie zadane 5 października 2017 w Nasze projekty przez L33TT12 Gaduła (3,950 p.)
0 głosów
2 odpowiedzi 399 wizyt
pytanie zadane 3 lutego 2016 w C i C++ przez kolosemano Nowicjusz (170 p.)
+1 głos
2 odpowiedzi 423 wizyt
pytanie zadane 6 maja 2017 w Nasze projekty przez Munvik Dyskutant (9,350 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...