[Allegro]Kolizje lub coś podobnego
Ostatnio zmodyfikowano 2009-06-24 08:54
Juziogim3 Temat założony przez niniejszego użytkownika |
[Allegro]Kolizje lub coś podobnego » 2009-06-22 11:50:19 Po pracochłonnym stworzeniu mapy(nie wiem czy można ją nazwać kafelkową) uznałem że brakuje mi czegoś w stylu kolizji tzn. jeżeli moja postać podchodzi do któreś z krawędzi mapy to dalej program zakazuje jej iść -> i w tym problem. Mógłby mi ktoś doradzić co zrobić(jak to rozwiązać, lub od czego zacząć)? (Jak będzie trzeba to wstawię kod i inne pliki) |
|
WunM |
» 2009-06-22 11:56:11 Temat woda... powiedz z czym dokładnie masz problem. |
|
Juziogim3 Temat założony przez niniejszego użytkownika |
» 2009-06-22 12:04:55 Gdy rozpoczynam program pojawiam się tu: X - postać _______ / / / X / / / --------- ale jak wciskam strzałkę w prawo to mogę iść aż do końca ekranu(lub jeszcze dalej) ______ / / X / ----- I teraz jak zrobić aby postać mogła dojść tylko do krawędzi: ______ / / / X/ / ------- Jeżeli w takiej pozycji będę klikał strzałkę w prawo to postać się nie będzie ruszała (lub będzie szła w górę wzdłuż krawędzi) PS: Postać jest zawsze na środku ekranu, a rusza się mapka |
|
TGR |
» 2009-06-22 12:15:48 |
|
Juziogim3 Temat założony przez niniejszego użytkownika |
» 2009-06-22 12:23:13 |
|
malan |
» 2009-06-22 15:28:48 Może wczytaj pozycje krawędzi do jakieś tablicy i przy każdym ruchu sprawdzaj, czy aktualna_pozycja!=pozycja_z_tablicy. Jeżeli aktualna_pozycja==pozycja_z_tablicy (czyli ludzik wyszedł poza ekran), to sprawdź w jakiem punkcie znajduje się ludzik i względem tego punktu przesuń go w górę lub w dół itp. Nie wiem czy ta metoda nie spowolni pracy programu, ale tylko to na razie mi przyszło na myśl. |
|
Juziogim3 Temat założony przez niniejszego użytkownika |
» 2009-06-22 17:22:28 Ehh.. Po dłuższym zastanowieniu i próbach dochodzę do wniosku(aż wstyd się przyznać)że nie umiem wyznaczyć aktualnej pozycji :( Próbowałem zrobić coś takiego: float mapa_x = 3, mapa_y = 3; float map_x = 3, map_y = 3; .....
if(( key[ KEY_RIGHT ] ) &&( mapa_x < 10 ) ) { mapa_x = mapa_x + 0.05; map_x++; } if(( key[ KEY_LEFT ] ) &&( mapa_x > 0 ) ) { mapa_x = mapa_x - 0.05; map_x--; } if(( key[ KEY_DOWN ] ) &&( mapa_y < 10 ) ) { mapa_y = mapa_y + 0.05; } if(( key[ KEY_UP ] ) &&( mapa_y > 0 ) ) { mapa_y = mapa_y - 0.05; } .... if( map_x == 5 ) { mapa_x = 6; map_x = 6; } wys_mape();
Ale też nie działało :/ A jak podałem : if(map_x==3) to działało jednorazowo |
|
DejaVu |
» 2009-06-22 18:02:08 Moim skromnym zdaniem powinieneś realizować program z założeniem, że mapa jest prostokątem i jest ona narysowana prosto, a nie pod kątem. Obecnie tylko komplikujesz sobie sprawę tym, że musisz sobie przekształcać w pamięci fakt obrócenia mapy o kąt 45 stopni. Po zrobieniu wszystkiego planszę całą możesz później obrócić (jeśli będzie rysowana na buforze). Grafika straci trochę na jakości, jednak efekt uzyskasz w dużo prostszy sposób. Druga metoda to późniejsza modyfikacja kodu pojegająca de'facto na modyfikacji samego rysowania planszy, ludka i obiektów, jednak nie będzie potrzeby modyfikowania algorytmów, sterowania itp., ponieważ to już zostanie wszcześniej zrobione na dużo prostszym modelu świata (mapy). |
|
« 1 » 2 3 |