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

[Allegro] Kolizje na mapie

Ostatnio zmodyfikowano 2009-01-31 11:22
Autor Wiadomość
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.
P-3948
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 )
P-3949
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ę :)
P-3950
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:
C/C++
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.
P-3961
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 :)
P-3962
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
P-3963
Ju1ian
Temat założony przez niniejszego użytkownika
» 2009-01-30 22:29:52
Ponawiam prośbę.
P-4022
lynx
» 2009-01-30 22:45:15
Jeden temat, jedno pytanie. :)
P-4023
« 1 » 2
  Strona 1 z 2 Następna strona