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

[Allegro] Mapa kafelkowa - problem z kolizją.

Ostatnio zmodyfikowano 2011-12-29 13:27
Autor Wiadomość
RazzorFlame
» 2011-12-29 12:15:29
Alcber, sorry za tamten post, jesli chcesz to zrobić to tak jak mowilem.
C/C++
if( map[ poz_ludka_x / 32 ][ poz_ludka_y / 32 ] == 1 ) //...
/\ ten if oblicza pozycje ludka wzgledem mapy. Jesli chcesz zeby nie mogł przejść na prawo jesli jest przeszkoda to przed kazdym ruchem w prawo sprawdzaj czy nie ma tam tego kafla czy np:
C/C++
if( key[ KEY_RIGHT ] && map[( poz_ludka_x / 32 ) + 1 ][ poz_ludka_y / 32 ] == 0 )
{
    poz_ludka_x++;
}
W pierwszym musisz dodać jeden. Zobacz na ten "obrazek":

X = przeszkoda
. = wolne pole
^ = postac

........
........
..^X....
........

Musisz dodać ten jeden żeby sprawdzić czy kratke obok jest przeszkoda. Jesli na lewo to -1, Jeśli do dołu to w drugim argumencie dodać 1, jesli do gory do w drugim arg. odjąc 1 itd.

EDIT:
To co ty napisałes nie jest do konca dobre. Patrz:
C/C++
int poz_x, poz_y = 100; //tutaj nie robisz / 32!!!
if( key...&& map[( poz_x / 32 ) + 1 ][ poz_y / 32 ] == 0 )
{
    //...
}
Pamietaj! W pierwszym argumecie dodajesz jeden a w drugim nie![/code]
P-46562
Aclber
Temat założony przez niniejszego użytkownika
» 2011-12-29 12:27:14
int pozycja_y = x/32;
int pozycja_x = y/32;

Mam w pętli więc  dobrze oblicza położenie gracza;

Czyli taki kod powinien działać jak należy jednak działa niepoprawnie:
C/C++
if( key[ KEY_RIGHT ] &&( planszaGry.mapa[ pozycja_y ][ pozycja_x + 1 ] == 0 ) )
{
    x += 1;
}
P-46564
RazzorFlame
» 2011-12-29 12:29:19
Alcber. Tobie sie gracz posuwa po 1 kratce czy po pixelu??

EDIT: jesli sie nie myle to w twoim kodzie wygląda na to że chcesz oblicz dolną kratke... Czekaj zaraz ci dam poprawny kod ( jeśli nie zapomniałem ).
P-46565
Aclber
Temat założony przez niniejszego użytkownika
» 2011-12-29 12:30:27
Po  jednym pixelu, może w taki razie zrobić żeby poruszał się po 1 kratce tylko wtedy jak.
Ogólnie dziwnie mi strasznie te przeszkody występują. Nie zatrzymuje się tam gdzie powinien.
Mapę mam dobrze wygenerowaną bo sprawdziłem.

P-46566
RazzorFlame
» 2011-12-29 12:33:19
C/C++
int poz_x, pox_y = 100;

if( key[ KEY_RIGHT ] &&( planszaGry.mapa[ pozycja_y / 32 ][( pozycja_x / 32 ) + 1 ] == 0 ) )
{
    x += 1;
}
O ile sie nie myle, to jest dobrze.

Nie dawno udało mi się zrobić poruszanie mapy tak jak np w Tibii. Niby co jedną kratke tylko że po pixelu sie posuwa. Tylko że to w SDL'u...
P-46568
Aclber
Temat założony przez niniejszego użytkownika
» 2011-12-29 12:35:23
int poz_x, pox_y = 100;
Czemu tutaj przypisałeś 100 ?
P-46569
RazzorFlame
» 2011-12-29 12:36:51
A znam twoją pozycje??? Chodzi ze tam nie dajesz poz_x = 100 / 32;
Chodzi o sam przykład
P-46570
Aclber
Temat założony przez niniejszego użytkownika
» 2011-12-29 12:40:43
Nie rozumiem, przecież pozycja gracza zmienia się cały czas i to mam w pętli While zawarte
Czy po każdym przejściu pętli mam inną pozycje gracza. Więc nie rozumiem dlaczego wstawiłeś to 100.
P-46571
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona