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

System kolizji - Gra Canvas

VPS Starter Arubacloud
+1 głos
364 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 (599,730 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 (599,730 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 (599,730 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 (599,730 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 (599,730 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,630 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 (599,730 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,630 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,630 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 425 wizyt
pytanie zadane 17 sierpnia 2020 w JavaScript przez Bakkit Dyskutant (7,600 p.)
+5 głosów
2 odpowiedzi 665 wizyt
0 głosów
1 odpowiedź 507 wizyt
pytanie zadane 1 stycznia 2019 w JavaScript przez Grzegorz :> Dyskutant (8,050 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...