• 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
494 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 (605,260 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 (605,260 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 (605,260 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 (605,260 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 (605,260 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 (214,220 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 (605,260 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 (214,220 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 (214,220 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 595 wizyt
pytanie zadane 17 sierpnia 2020 w JavaScript przez Bakkit Dyskutant (7,600 p.)
+5 głosów
2 odpowiedzi 907 wizyt
0 głosów
1 odpowiedź 541 wizyt
pytanie zadane 1 stycznia 2019 w JavaScript przez Grzegorz :> Dyskutant (8,050 p.)

93,023 zapytań

141,986 odpowiedzi

321,290 komentarzy

62,370 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...