Skocz do zawartości

Jak to zrobić...


qspy

Rekomendowane odpowiedzi

Witam!

 

Robię grę w GM - Top Down Shotter i chcę gdy z dalekiej odległości strzeli się do przeciwnika to żeby przycisk zwalniał a ekran się przybliżał i szedł razem z pociskiem aż do trafienia ofiary, później już będzie wracało do normy.

 

Co to za nazwa tematu? Warn i tyle

gnysek

Odnośnik do komentarza
Udostępnij na innych stronach

"przycisk zwalniał"...?

Chyba masz na myśli pocisk :P

 

Cóż, to dosyć trudne zagadnienie. W najprostszej wersji po prostu zmniejszaj room_speed, po kolizji z wrogiem powróć do normalnej wartości.

 

Co do podążania za nabojem zmień viewa. Lub najprostsza technika, stwórz obiekt obj_viewer, i ustaw dla niego object following. I, jeśli chcesz, aby ekran podążał za bohaterem to ustawiasz x i y tego obj_viewer na takie, jakie ma obj_hero, a jeśli chcesz, aby podążał za pociskiem, to ustawiasz mu współrzędne pocisku.

 

Lepsza zmiana viewa, daje większa kontrolę. Ale jeśli nie masz większych wymagań to to z obiektem wystarczy ;)

 

Jeszcze jakbyś nie wiedział: point_distance(obj_hero.x, obj_hero.y, obj_enemy.x, obj_enemy.y) zwróci ci odległość od pocisku do wroga.

 

Ustal sobie jeszcze, jak to dokładnie ma wyglądać. Przyjmijmy, że pocisk ma zacząć zwalniać połowy drogi, aż dojdzie do 10FPS (przyjmuje, że domyślnie masz 30). Więc obj_hero przy strzale ustawia pociskowi zmienną [/i]start_matrix[/i] na połowę odległości od gracza do wroga.

I wtedy pocisk sprawdza, czy jego dystans do wroga jest już mniejszy niż ten ze zmiennej start_matrix (czy pokonał już połowę drogi), jeśli tak, to zaczyna stopniowo zmniejszać room_speed - dokładnie o ile ci nie powiem, bo nie wiem z jaką prędkością ma ten twój pocisk lecieć, a wymyślać wzoru mi się nie chce, choć powinno to być mniej więcej coś takiego:

 

GML
room_speed -= (<dystans od połowy drogi do wroga>/obj_pocisk.speed)/20;

//Nie jestem pewien ale chyba dobrze... dystans podzielę przez speed pocisku to wyjdzie, ile klatek powinno zająć pociskowi dotarcie do wroga, dzielę to przez 20 (startowy FPS minus ten, jaki ma wyjść (30-10))...

 

Chyba zaraz jakiś przykład zrobię :D

Odnośnik do komentarza
Udostępnij na innych stronach

Hmmm...

Znalazł się pewien problem.

 

A mianowicie, skąd miałbym wiedzieć, czy pocisk rzeczywiście trafi wroga? Ewentualnie mógłbym obliczać dystans do najbliższej przeszkody po podanym directionie, i sprawdzić, czy ta przeszkoda to obj_enemy, ale... chyba to trochę niewydajne by było :/

 

Jak wymyślę coś bardziej wydajnego to napisze... a może sam mi takowy pomysł podsuniesz :P ?

 

Zaraz... chyba kiedyś na YYG widziałem taki przykład... był taki ludzik z "pistoletem laserowym"... i w miejscu, gdzie laser stykał się z jakąś przeszkodą pojawiała się kropka i na dole jeszcze pisało, jaki to obiekt... idę poszperać w sieci :D

 

Edit: Tyy.... u siebie też się forum rozjedżdża na mojej poprzedniej wypowiedzi? Oo

Cała "ramka" z tekstem wysuwa się na prawą stronę '-.-

Odnośnik do komentarza
Udostępnij na innych stronach

Jak tak to będzie bez sensu, zaufaj mi... strzelasz w drzewo, pokazuje się matrix. Strzelasz do gościa, nie ma go. A jak strzele w nic...? :P W pustą przestrzeń _^_ ?

 

W sumie to mniej więcej wiem, jak to zrobić... ale jakoś nie mam teraz za bardzo ochoty...

 

Chwila. Mam na dysku stary projekt strzelanki. Dodałbym do niego AI wroga, zmianę broni i takie tam bajery (i matrixa :D) i bym dał przykład strzelanki od góry. Ale to może jutro... Ew. dzisiaj wieczorem, choć wątpię...

Odnośnik do komentarza
Udostępnij na innych stronach

ja mam pomysł to tego co pisał Dawidds.

Kiedyś robiłem coś takiego: można lengthdir'em na pętli sprawdzić czy miejsce o pixel dalej w danym kierunku jest wolne(tak działa mój laser) w miejscu przerwania pętli sprawdzasz jaki obiekt znajduje się w pozycji końcowej lasera. Chyba o takie coś Ci chodzi?

Odnośnik do komentarza
Udostępnij na innych stronach

Lepiej nie tykac room speed bo wplynie to na negatywnie na plynnosc gry. Jakis globalny modyfikator, ktory zalezny jest od odleglosci najblizszego wzgledem gracza pocisku i przez, ktory mnozone sa predkosci bylby lepszym rozwiazaniem. Gdy odleglosc bylba wieksza niz jaka wartosc modyfikator bylby rowny 1.

 

Tylko jeszcze trzeba by polprosta rzucic i sprawdzic, czy moze trafic w gracza.

 

 

EDIT:

Zrobilem Ci przyklad. Nie chce mi sie bawic, wiec wady:

-uzywanie instance_nearest - zly pomysl, lepiej miec liste pociskow i sprawdzac, ktorego promien koliduje

-parametr "m" zmienia sie liniowo - nie wyglada to ciekawie, znajdz jakas fajna funkcje, ktora lepiej odda to co chcesz osiagnac

 

https://gmclan.org/up78_12_matriks.html

 

W praktyce sprawdzanie polprostej jest niewykonalne, wiec musialem ograniczyc sie do odcinka. Uzylem unreg GM7.

 

 

EDIT DOWN:

Moze jeszcze w pokoju posprzatac?

 

Sam jesteś down. Warn +1.

gnysek

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