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

Jak to działa - czyli wykrywanie powierzchni

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
451 wizyt
pytanie zadane 30 czerwca 2016 w Rozwój zawodowy, nauka, praca przez niezalogowany

Witam, mam pytanie odnośnie tego jak np w grach takich jak ta(co prawda tutaj nie jest do końca w 2d ale chodzi mi tylko o przykład, mam na myśli np gry pokroju mario itp):

https://www.youtube.com/watch?v=NWnhq8MgoeQ

wykrywana jest powierzchnia? Skąd taki mario "wie", że jest na powierzchni i nie spada? Przecież na całej planszy są różne wysokości raz jest wyżej raz niżej, jak to jest zrobione, bo chyba nie ma okodowanego każdego najmniejszego fragmentu mapy, prawda?

3 odpowiedzi

0 głosów
odpowiedź 30 czerwca 2016 przez iWantCode Bywalec (2,170 p.)
Ziemia, obiekt jeśli Mario nie tyka ziemi Mario.y =- 1
komentarz 30 czerwca 2016 przez niezalogowany
chmm tyle się domyślam ale jak to zrobić na całej długości? Jak zdefiniować "tykanie ziemi"
0 głosów
odpowiedź 30 czerwca 2016 przez ShiroUmizake Nałogowiec (46,300 p.)
Zainteresuj się wzorcem projektowym : STAN;

Dużym skrócie, że mamy obiekt Earth z klasy EarthState do którego jest zaimplikowany interfejs IEnviromentStates i powiedzmy przyjmuje dwie wartości true or false. Pod względem zmienionego stanu, obiekty zależne zmieniają właściwości: np;mario. Załóżmy, że mamy obserwatora, który bacznie obserwuje nas obiekt, pod wzlędem właściwości środowiska, zezwala na takie zdarzenia, na który otrzymany stan pozwala:

  if (enviromentStateList(powiedzmy, że to jest nasza lista obiektów stanów).getEarthState()){

getPos (enviroment.getPOSY()) <- załóżmy, że środowisko to jest obiekt, który przyjmuje konstruktorze kolejne obiekty np: POS który jest final)

MarioCanJump();

else

return false;

public boolean MarioCanJump (){

return true;
}

// Powiedzmy, że kolejna grupy klas odpowiadająca za akcje, podmieni stan na false (nie dotyka),przez co obserwator zwróci false i nie umożliwi mu skoku (bo jak powietrzu można skakać).
0 głosów
odpowiedź 30 czerwca 2016 przez Grzyboo Nałogowiec (28,880 p.)
edycja 30 czerwca 2016 przez Grzyboo

Obiekt prostokątny spada w dół. Co jakiś zdefiniowany czas przesuwamy go o pionową prędkość do dołu.

if(object.y + object.size.y > floor.y)
    // kolizja

object.y - pozycja pionowa gracza

object.size.y - wysokość gracza

floor.y - pozycja pionowa podłogi

 

Zazwyczaj kierunek Y zwiększa się w dół, a na samym górze okna jest równy 0 (przeciwnie niż w matematyce)

 

No i tak z grubsza wykrywasz prostą kolizję. Dla bardziej zaawansowanych (nie prostokątnych) trzeba użyć np. "Separating Axis Theorem", ale to trochę więcej zabawy.

Podobne pytania

+1 głos
1 odpowiedź 178 wizyt
pytanie zadane 11 maja 2016 w Offtop przez programmero Bywalec (2,420 p.)
0 głosów
0 odpowiedzi 1,026 wizyt
pytanie zadane 28 grudnia 2022 w C i C++ przez MichaelM Bywalec (2,980 p.)
0 głosów
2 odpowiedzi 193 wizyt

93,444 zapytań

142,436 odpowiedzi

322,698 komentarzy

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

...