Ju1ian Temat założony przez niniejszego użytkownika |
[Allegro] Kolizje na mapie » 2009-01-27 22:10:12 Mam mapę w tablicy dwuwymiarowej złożonej z kaflów 40x40. Jest tam woda, ziemia i przejścia między ziemią a wodą. Mam ludka, gdy naciśnie się strzałkę to mapa się przewija, ale ludek nie chodzi (tak jakby kamera podążała za ludkiem od góry). Mój problem tkwi w tym, że mój "ludek" wchodzi na wodę. Mam pewną koncepcję, ale nie wiem czy jest dobra i nie wiem jak ją wykonać. Otóż myślę, że w tej tablicy byłoby trzeba najpierw wypisać wszystkie pola, na które nie można wejść (false) np. pole map[10][25]. I wtedy przy sterowaniu może iść do góry i w inne kierunki jeżeli pole na którym stoisz - 1 != false (albo inaczej). Z góry dziękuję. Jak coś to kod mogę zapodać ;P. |
|
lynx |
» 2009-01-27 22:40:27 Pomysł jest prosty i skuteczny, także śmiało możesz takiego używać. ;)
/edit: Z początku nie zauważyłem pytania i myślałem że chodzi Ci o jakieś opinie. A więc teraz to nadrobię.
Wszystko zależy jaką grę robisz, a polega to głównie na: 1) Zapisywanie pozycji ludzika. (najlepiej gdyby był on wielkości jednego pola.) 2) Sprawdzanie czy i jaki jest wciśnięty klawisz. 3) Sprawdzanie czy tablica [pole_x_ludzika +/- 1] [pole_y_ludzika +/- 1] == false 4) Jeżeli warunek jest prawdziwy to przesuń ludzika na następne odpowiednie pole ( +/- 1 ) |
|
Patzick |
» 2009-01-28 00:14:25 miałem podobny problem gdy uczyłem się allegro, rozwiązałem go tak, że zdefiniowałem kawałki mapy na które może wchodzić ludek i wsadziłem to do ifów odpowiedzialnych za przemieszczanie mapy. Dam tu jednego takiego ifa. if( key[ KEY_LEFT ] &&( mapa_x > 0 ) ) { ludek.kierunek = 2; if((( map[ mapa_y ][ mapa_x - 1 ] ) == 0 ) ||(( map[ mapa_y ][ mapa_x - 1 ] ) == 1 ) ) { mapa_x = mapa_x - 1; } else { mapa_x = mapa_x; }; } Mam nadzieję, że pomogę :) |
|
Ju1ian Temat założony przez niniejszego użytkownika |
» 2009-01-28 16:09:16 Dzięki! Teraz już wiem jak to zrobić ;P EDIT: Tak mój ludzik jest wielkości kafla. Próbuje to robić tyle, że nie działa. To 1 i 0 oznaczają numer kafla? U mnie numer kafla wody to 10, oto mój kod: if(( key[ KEY_RIGHT ] ) &&( mapa_x < 10 ) ) { if((( map[ mapa_y ][ mapa_x + 1 ] ) == 10 ) ) { mapa_x = mapa_x + 1; } else { mapa_x = mapa_x; } } else if(( key[ KEY_LEFT ] ) &&( mapa_x > 0 ) ) { if((( map[ mapa_y ][ mapa_x - 1 ] ) == 10 ) ) { mapa_x = mapa_x - 1; } else { mapa_x = mapa_x; } } else if(( key[ KEY_DOWN ] ) &&( mapa_y < 5 ) ) { if((( map[ mapa_y + 1 ][ mapa_x ] ) == 10 ) ) { mapa_y = mapa_y + 1; } else { mapa_y = mapa_y; } } else if(( key[ KEY_UP ] ) &&( mapa_y > 0 ) ) { if((( map[ mapa_y - 1 ][ mapa_x ] ) == 10 ) ) { mapa_y = mapa_y - 1; } else { mapa_y = mapa_y; } } I jeszcze jedno małe pytanie. Jak zrobić, aby ludek tzn. mapa chodziła co 40 px (czyli co 1 klocek mapy), ale płynnie i wolno. |
|
Patzick |
» 2009-01-28 17:31:23 kod np. mapa_x = mapa_x - 1; Przesuwa mapę o 1 kwadrat czyli te 40 px. 0 i 1 to numery kafli po których ludek może chodzić, jeżeli kafel będzie inny to ludek na niego nie wejdzie, pokombinuj chwilę, na pewno wpadniesz na to co i jak :) |
|
Ju1ian Temat założony przez niniejszego użytkownika |
» 2009-01-28 18:29:35 a) No niby tak, ale mogę stać np. polowę na tym i połowę na tym ;/. b) Zmiejszyłem liczbę klocków i zapisałem poprawnie, ale nadal nie działa |
|
Ju1ian Temat założony przez niniejszego użytkownika |
» 2009-01-30 22:29:52 Ponawiam prośbę. |
|
lynx |
» 2009-01-30 22:45:15 Jeden temat, jedno pytanie. :) |
|
« 1 » 2 |