Skocz do zawartości
maly158

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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

dla czego collision_line nie działało?

E: nvm nie zauważyłem że 3d, podłoże masz płaskie?

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Mój mechanizm strzelania uwzględnia wysokość lotu pocisku (Z) i w zwykłej kolizji działa mi wszystko świetnie ale pocisk jest za wolny - jak zwiększyłem jego speed to dzieje się to co opisywałem wcześniej.

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nie wiem czy rozumiem, ale jeśli będziesz sprawdzał kolizję pomiędzy aktualnym położeniem, a ostatnim, to by nie było problemu.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Pytasz o przypadek z normalną kolizją czy collision_line ?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

linia między xprevious, yprevious a x i y

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×