Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

allegro, kolizja (pewnie juz po raz kolejny)

Ostatnio zmodyfikowano 2009-12-14 13:38
Autor Wiadomość
dmx81
Temat założony przez niniejszego użytkownika
allegro, kolizja (pewnie juz po raz kolejny)
» 2009-12-11 16:04:29
jak w temacie, mam problem z kolizja, a raczej z ustaleniem zasady.
Problem pojawia sie, kiedy przemieszczenie y1 dla obiekt1 jest wieksze niz y1--(ruch do gory, skok, w1=5), poniewaz dla y1++ mozna ustalic, ze jezeli

y1==y2+w2 - czyli dotyka obiektu2 od dolu - wtedy kolizja i blokada przemieszczania w gore

ale jesli porusza sie np y1-=50, a y2=40, w2=5 - wtedy przeskakuje mi poprostu przeszkode

jesli dam ograniczenie, ze kolizja, gdy y1<=y2+w2 (bo dla y1<y2+w2&&y1+w1>y2 nie dziala, przeskakuje, wiadomo, warunek po && niespelniony)
to ok, pod warunkiem, ze nie znajduje sie kolejny obiekt3, ktory rowniez wchodzi w zasieg skoku obiekt1 - y3=30,w3=5

chce ograniczyc skok, ze jesli jest wiekszy niz odleglosc od y1 do nastepnego obiektu nad nim, do wlasnie tej wartosci czyli if(kolizja(obiekt1,obiekt2) to skok=y1-(y2+w2)

ale jesli wlasnie pare obiektow wchodzi w zasieg skoku, ze obiekt doskoczy ponad kilka obiektow, jak wybrac najnizszy obiekt, na ktorym obiekt1 powinien sie zatrzymac

a druga sprawa, bo moge chyba napisac funkcje, ktora ze wszystkich obiektow sprawdzi, ktory jest najblizej i znajduje sie ponad, ze wystapi kolizja, to co w przypadku, jesli obiekt najnizszy jest ruchomy, w momencie skoku nie powoduje kolizji, wiec ograniczenie zostanie przypisane dla obiektu wyzej, a w czasie skoku ruchomy obiekt spowoduje kolizje - obiekt1 go nie zauwazy raczej

troche zawile moze napisane, mam nadzieje, ze ktos zrozumial, ale jesli admin uzna, ze post zbyt zawily i wymaga edycji, to prosze o info, pozniewaz troche w glowie juz mi sie kreci :)

P-12072
DejaVu
» 2009-12-11 16:16:06
Zazwyczaj czytam co drugie zdanie ;p w każdym razie jeśli dobrze zrozumiałem chodzi o przypadek gdy:
1) są dwa obiekty
2) obiekt pierwszy jest np. prostokątem o wymiarach 3x100
3) obiekt drugi jest wymiarów: 10x10
4) jak wykonujesz ruch obiektem drugim o 1px - wszystko jest ok
5) jak wykonujesz ruch obiektem drugim o 20px - kolizja nie działa
Jeśli tak jest to:
1) po wykonaniu ruchu sprawdź czy znak się nie zmienił między pozycjami obiektów, tj:
C/C++
int znak1 = obiekt1.x - obiekt2.x;
//wykonaj ruch
int znak2 = obiekt1.x - obiekt2.x;
if( znak1 >= 0 && znak2 < 0 || znak1 < 0 && znak2 >= 0 )
{
    //obiekty przeszły przez siebie - popraw pozycję
} //if
To jest oczywiście w dużym uproszczeniu co można zrobić aby rozwiązać problem.
P-12074
dmx81
Temat założony przez niniejszego użytkownika
» 2009-12-11 16:35:15
to rozwiazanie rozumiem, ale problem nieco bardziej skomplikowany:

powiedzmy jest ludek na 2 pietrze budynku
wykonujemy podskok,gdzie wartosc podskoku "przecina" kilka sufitow w gore,

trzeba rozwiazac problem, aby ludek zatrzymal sie na pierwszej napotkanej przeszkodzie - tak jak mowilem, nie ma problemu, kiedy ruch wystepuje plynnie, gdzie na biezaco mozna sprawdzac kolizje, tu od razu wystepuje kolizja z kilkoma obiektami - chyba trzeba bedzie napisac funkcje, ktora sprawdzi, ktory sufit jest najnizej :)

gorzej, jak bedzie to budynek 20 pietrowy :P rozumiem, ze raczej skok nie bedzie tak duzy, ale teoretycznie powinno byc zabezpieczenie przed przeskoczeniem pierwszej napotkanej przeszkody, wiec bede musial do funkcji dopisac jako argumenty wszytskie mozliwe obiekty/przeszkody? i sprawdzic ktora w danej chwili znajduje sie nad postacia i jest najblizej?

a moze jest prostsze rozwiazanie? ktorego wlasnie szukam...
P-12086
DejaVu
» 2009-12-14 13:38:29
Kolizja między dwoma obiektami jest prosta. Gdy przychodzi do pracy z całą sceną już tak nie jest i trzeba się z tym liczyć :)
P-12183
« 1 »
  Strona 1 z 1