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

System kolizji - Gra Canvas

Object Storage Arubacloud
+1 głos
394 wizyt
pytanie zadane 4 lipca 2020 w JavaScript przez Bakkit Dyskutant (7,600 p.)

Witam. W ramach nauki js'a postanowiłem napisać sobie prowizoryczną grę. Skaczemy sobie kwadracikiem dopóki nie dotkniemy kolców, które same w naszą stronę podążają.

Chciałem się dowiedzieć w jaki sposób mógłbym napisać system kolizji, aby po dotknięciu kolca gra uruchamiała się ponownie. Pozdrawiam.

komentarz 4 lipca 2020 przez Comandeer Guru (601,590 p.)
Byłoby zdecydowanie łatwiej coś odpowiedzieć, gdybyś pokazał kod tej gry, bo np. czy wiadomo, gdzie znajdują się kolce (w sensie: czy informacje o ich współrzędnych są zapisywane, czy są wykorzystywane tylko do narysowania ich)?
komentarz 5 lipca 2020 przez Bakkit Dyskutant (7,600 p.)
Na początku gry rysują się po prawej stronie planszy i co 30 milisekund rysują się na nowych współrzędnych (coraz bliżej gracza).
komentarz 5 lipca 2020 przez Comandeer Guru (601,590 p.)
Czyli rozumiem, że znasz przez cały czas współrzędne kolców?
komentarz 5 lipca 2020 przez Bakkit Dyskutant (7,600 p.)
Oczywiście
komentarz 5 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
Pokazałbyś kod odpowiedzialny za ciągły ruch kolców?

2 odpowiedzi

0 głosów
odpowiedź 5 lipca 2020 przez Comandeer Guru (601,590 p.)
wybrane 5 lipca 2020 przez Bakkit
 
Najlepsza

Jeśli znasz współrzędne kolców, to tak po prawdzie to jest głównie sama matematyka.

Osobiście prawdopodobnie użyłbym podejścia uproszczonego, czyli traktował ten kolec jako prostokąt. To, co prawda, nieco powiększy jego hit box, ale myślę, że akceptowalnie. Natomiast mocno uprości obliczenia. Jeśli gracz będzie w osi x w rejonie od kolec.x do kolec.x + kolec.width i w osi y w rejonie od kolec.y do kolec.y + kolec.height, to wiadomo, że doszło do kolizji.

komentarz 5 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
@Comandeer, Dlaczego moje rozwiązanie nie zadziała a Twoje tak?
komentarz 5 lipca 2020 przez Comandeer Guru (601,590 p.)
Nie, Ty zasugerowałeś całkowite przepisanie logiki gry + zaproponowałeś obliczenia oparte o połowę boku trójkąta (co np. da złe obliczenia dla wysokości).
komentarz 5 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
W oparciu o połowę, ponieważ pobiera się lokalizacje właśnie środka danej figury
komentarz 5 lipca 2020 przez Comandeer Guru (601,590 p.)
…co dalej da złe obliczenia dla wysokości.

Poza tym zapominasz, że współrzędne są w dwóch osiach – Twoja propozycja mówi po prostu o "współrzędnych".
0 głosów
odpowiedź 4 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)

Ja wstawiłbym cały kod gry do funkcji, która aktywowałaby się dwa razy:

  1. Od razu po załadowaniu strony
  2. Kiedy współrzędne kwadratu są równe współrzędnym kwadratu +- bok tego trójkąta równobocznego

Przykładowy kod sprawdzający kolizję:

/* a = połowa boku trójkąta
x = współrzędne kwadratu
y = współrzędne trójkąta */


If(y <= a+x && y>=x-a){funkcja()}

 

komentarz 5 lipca 2020 przez Ehlert Ekspert (212,670 p.)
Przecież ruch jakiegoś obiektu to nie jest pętla. To zmiana wartości jego położenia w pętli stałokrokowej.
2
komentarz 5 lipca 2020 przez Comandeer Guru (601,590 p.)
https://youtu.be/_XHqN7RvAnM – tak mi się skojarzyło :p

Nie widzę za bardzo sensu w posiadaniu dodatkowej pętli do obliczeń fizycznych. W tak prostej grze można to bez problemu zrobić w pętli renderującej, znając po prostu różnicę czasu między poprzednim a obecnym jej cyklem.
1
komentarz 5 lipca 2020 przez Ehlert Ekspert (212,670 p.)

Tak naprawdę pętla stałokrokowa nie musi być oddzielną pętla, a zwykłym ifem, który wykona się po określonym czasie. W js można to jednak ograć poprzez setTimetout. Warto też zaznaczyć że nie ma sensu przy większej ilości fpsów wykonywać logiki w każdym cyklu renderującym. wink

komentarz 5 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
Chodzi mi tylko o to, żeby po każdym ruchu, ewentualnie co kilka takich ruchów, zależy jak duże one są, wstawić mojego ifa. Jeśli przesuwanie się kolców działa, to to też zadziała...
komentarz 5 lipca 2020 przez Ehlert Ekspert (212,670 p.)
Nie, nie zadziała prawidłowo, bo proponujesz jakąś spaghetti rekurencję. Takie rzeczy powinno się robić na eventach.

Podobne pytania

+2 głosów
3 odpowiedzi 459 wizyt
pytanie zadane 17 sierpnia 2020 w JavaScript przez Bakkit Dyskutant (7,600 p.)
+5 głosów
2 odpowiedzi 692 wizyt
0 głosów
1 odpowiedź 517 wizyt
pytanie zadane 1 stycznia 2019 w JavaScript przez Grzegorz :> Dyskutant (8,050 p.)

92,579 zapytań

141,432 odpowiedzi

319,662 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!

...