Autor Wątek: "Ocieranie się" o ściany.  (Przeczytany 1656 razy)

Offline Oti

  • Użytkownik

# Luty 25, 2009, 22:42:40
Witam. :)

Niedawno(wczoraj, w sumie dzisiaj koło północy) zacząłem pisać sobie strzelankę z widokiem od góry. Fakt, gra jest w początkowej fazie produkcji, ale nie wiem jak rozwiązać reakcję na kolizję ze ścianą.. Mianowicie nie wiem jak zrobić, żeby można było iść kolidując ze ścianą, ocierając się o nią. Jeśli w momencie wykrycia kolizji przesunę postać na poprzednią pozycję, to stanie ona w miejscu i będzie to wyglądać sztucznie. Może tu zastosować prawo kąt padania=kątowi odbicia, i odbić gracza od ściany z siłą odpowiednio mniejszą od tej, z którą trafiłem w tą ścianę?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Luty 25, 2009, 22:59:33
Jeżeli kafelki masz kwadratowe, to sprawa jest banalna: rozbij ruch na dwa niezależne ruchy (po X i po Y). Jeżeli ściany mogą być pod różnymi kątami, to już bez szczypty matmy na wektorach się nie obejdzie. :)

Offline Troll

  • Użytkownik
    • Oficjalna strona gry Gizarma

# Luty 25, 2009, 23:06:00
Zawsze możesz rozbic przesunięcie na składową styczną i prostopadłą do ściany, i w momencie kolizji,  przesunąc postac tylko w kierunku stycznym (pilnując aby odległośc od ściany była odpowiedznia wzdłuż kierunku prostopadłego)

Offline Niko

  • Użytkownik

# Luty 25, 2009, 23:06:09
Ja niedawno jak próbowałem zrobić kolizję na ścianach, to robiłem tak. Jak idę do przodu, to zmienia się pozycja x i z. Jeżeli następowała kolizja to zmieniałem wartość zmiennej kolizja na true, a pozycję z zmieniałem tylko wtedy, kiedy kolizja==false, jeżeli tak było, to zmieniała się tylko zmienna x, czyli wychodzi ocieranie :) 

Offline Oti

  • Użytkownik

# Luty 26, 2009, 02:17:40
Jeżeli kafelki masz kwadratowe, to sprawa jest banalna: rozbij ruch na dwa niezależne ruchy (po X i po Y). Jeżeli ściany mogą być pod różnymi kątami, to już bez szczypty matmy na wektorach się nie obejdzie. :)
No tak, tylko jak sprawdzić po której osi gracz ma się przesuwać, a po której nie? Kombinuje już z tym w ten sposób, że sprawdzam gdzie jest obiekt z którym koliduję(wartość absolutna różnicy między pozycjami), no i tak wychodzi, że raz dobrze się ślizga po poziomej, raz po pionowej, czasem półdobrze po pionowej(z jednej strony dobrze, z drugiej trochę za daleko wchodzi), czasem półdobrze po poziomej, i ostatnio półdobrze po obydwu. No ale dobrze to nigdy nie było..

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Luty 26, 2009, 02:43:52
Cytuj
No tak, tylko jak sprawdzić po której osi gracz ma się przesuwać, a po której nie?
Jak masz to jako dwa niezależne ruchy, to wyjdzie samo z siebie. :)

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Luty 26, 2009, 02:49:31
jezeli to sie opiera o czyste kafle i pozycja jest liniowa x,y bez zmiany kata ruchu to przeciez wystarczy ze obiczysz przed narysowaniem czy przypadkiem pozycja x+1; nie koliduje z kaflem ktory sie akurat znajduje przed / obok ciebie jezeli tak nie zmieniasz pozycji radze uzywac delty polozenia to ulatwia sprawe :] no chyba ze rzeczywiscie wolno obracac sie o dowolnu kat choc w sumie to nie robi specialnie roznicy i ile polozenie gracza jest globalne wzgledem mapy czyli liczone od [0,0] nawet gdy mapa ma przesuniecie ekran [x,y] w sensie ze tak naprawde gracz porusza sie tylko po ekranie roboczym a mapa przesuwa sie w taki sposob ze tylko czesc widoczna jest rysowana

Offline Oti

  • Użytkownik

# Luty 26, 2009, 03:26:25
Spoko, już wszystko działa, źle zrozumiałem wskazówki Krzyśka, ale już mi wytłumaczył, i jest ok. :)

poopa

  • Gość
# Luty 26, 2009, 04:08:47
obiczysz przed narysowaniem czy przypadkiem pozycja x+1; nie koliduje z kaflem ktory sie akurat znajduje przed / obok ciebie jezeli tak nie zmieniasz pozycji
No tak ale co to ma wspolnego z ocieraniem sie, slizganiem sie po scianie.

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Luty 26, 2009, 10:53:12
zeby policzyc "kolizje" do ocierania ;p