Skocz do zawartości

Problem ze strzelaniem w 3D


Rekomendowane odpowiedzi

Witam

Chciałbym wykorzystać w moim FPSie strzelanie bez generowania obiektu "pocisk" - przerobiłem już chyba wszystkie warianty rozwiązań z pociskiem ( zwykła kolizja i collision_line ),

w każdym razie to nie to czego potrzebuję. A teraz konkretnie - czy da się zrobić taki system strzelania do przeciwników , aby polegał na sprawdzeniu położenia obiektu "wróg"

względem celownika na ekranie (celownik np. krzyżyk na środku ekranu) + klik LPM ??

Z góry dzięki za pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Istnieje coś takiego jak raytracing, ale to wyższa szkoła jazdy. Możesz za to po prostu sprawdzać kąt między graczem, a wrogiem i od tego uzależnić to czy gracz celuje we wroga czy nie. To byłby prosty sposób, ale działałby tylko na jednej płaszczyźnie. Wystarczy od direction gracza odejmować point_direction(gracz.x, gracz.y,wróg. x,wróg. y) i zapisywac to sobie w jakiejś zmiennej u wroga i po prostu sprawdzać jeżeli ta zmienna jest większa od np. -30 i mniejsza od 30 to może być wróg postrzelony

Odnośnik do komentarza
Udostępnij na innych stronach

Z collision_line mam podobny problem jak ze zwykłą kolizją, a mianowicie zdarza się dość często, że pocisk po prostu przelatuje przez wroga, tyle że w zwykłej kolizji wiem w czy jest problem - speed pocisku (jeżeli speed pocisku jest większy niż suma średnic pocisku i wroga to pocisk od czasu do czasu pocisk przeleci przez wroga ponieważ pocisk przemieszcza się skokowo, a nie punkt po punkcie). Natomiast dlaczego tak się dzieje w collision_line - nie mam zielonego pojęcie. Znalazłem na forum kilka rozwiązań z collision_line, ale wszystkie działają tak samo.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeżeli pociągniesz linię od celownika na wprost na jakąś tam ustaloną odległość i collision line po drodze będzie miał parę obiektów wróg to kolizja odbędzie się z tym który ma najmniejsze ID. Pewnie stąd masz ten problem przenikania?

 

Kolizja w twojej grze jest 2D? I opiera się na maskach, jak w grach top-down?

 

Możesz zasymulować lot pocisku w pętli, tak jak to robi większość algorytmów strzelania z lasera. Nadając miejsce wylatywania pocisku i początkową prędkość w X Y Z. Przesuwał byś collision line w pętli ( na płaszczyźnie XY ) o ten wektor prędkości i sprawdzał maski + wysokość żeby uwzględnić Z. Tylko musisz zrobić coś żeby collision line ignorował obiekty z którymi ma kolizję na płaszczyźnie XY ale nie ma kolizji z wysokością Z. Może deaktywacja tych obiektów na czas działania tej pętli by pomogła w tym.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...