• 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

Object Storage Arubacloud
0 głosów
311 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,320 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 615 wizyt
pytanie zadane 5 października 2017 w Nasze projekty przez L33TT12 Gaduła (3,950 p.)
0 głosów
2 odpowiedzi 403 wizyt
pytanie zadane 3 lutego 2016 w C i C++ przez kolosemano Nowicjusz (170 p.)
+1 głos
2 odpowiedzi 448 wizyt
pytanie zadane 6 maja 2017 w Nasze projekty przez Munvik Dyskutant (9,350 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...