Już kiedyś poruszałem ten temat. Przeczytałem również artykuły, które mi podaliście, lecz nadal tego nie rozumiem i nie umiem zastosować.
Wpierw przedstawię obrazy:
1. Niebieska kropka i cień to gracz (32x32). Zielona kafelka to mapa oznaczona jako "1" w tabeli Map[x][x] (64x32):
http://desmond.imageshack.us/Himg696/scaled.php?server=696&filename=39923043.png&res=landing
2. Tak powinna wyglądać kolizja. Gracz nie powinien wyjść za zielone "pole", czyli przekątną 1/4 obrazu (przekątna 32x16):
http://desmond.imageshack.us/Himg96/scaled.php?server=96&filename=78753931.png&res=landing
3. Niestety, nie mam pojęcia jak zrobić kolizje z przekątną obrazu, więc dzieje się tak:
http://desmond.imageshack.us/Himg715/scaled.php?server=715&filename=64779146.png&res=landing
Kod:
ALLEGRO_DISPLAY * OknoAplikacji = al_create_display( 800, 600 );
ALLEGRO_BITMAP * Ghost = al_load_bitmap( "Media/Players/ghost.png" );
ALLEGRO_BITMAP * Wall = al_load_bitmap( "Media/Terrain/grass_01.png" );
ALLEGRO_BITMAP * Black = al_load_bitmap( "Media/Backgrounds/black.png" );
ALLEGRO_KEYBOARD_STATE StatusKlawiatury1;
int Mapa[ 2 ][ 2 ] = {
1, 1,
1, 1
};
int PrzesunX = - 368;
int PrzesunY = - 284;
do {
al_draw_bitmap( Black, 0, 0, 0 );
for( int i = 1; i <= 2; i++ ) {
for( int ii = 1; ii <= 2; ii++ ) {
if( Mapa[ i ][ ii ] == 1 ) al_draw_bitmap( Wall, ii * 64 - PrzesunX, i * 32 - PrzesunY, 0 );
}
}
al_draw_bitmap( Ghost, 368, 284, 0 );
al_flip_display();
al_get_keyboard_state( & StatusKlawiatury1 );
if( al_key_down( & StatusKlawiatury1, ALLEGRO_KEY_RIGHT ) ) {
PrzesunX += 2;
al_rest( 0.1 );
}
if( al_key_down( & StatusKlawiatury1, ALLEGRO_KEY_LEFT ) ) {
PrzesunX -= 2;
al_rest( 0.1 );
}
if( al_key_down( & StatusKlawiatury1, ALLEGRO_KEY_UP ) ) {
PrzesunY -= 2;
al_rest( 0.1 );
}
if( al_key_down( & StatusKlawiatury1, ALLEGRO_KEY_DOWN ) ) {
PrzesunY += 2;
al_rest( 0.1 );
}
} while( !al_key_down( & StatusKlawiatury1, ALLEGRO_KEY_ENTER ) );
PS. Nie wiem czemu, ale gra powinna wyswietlic 4 kafelki (zielone pola), a wyswietla jeden...
W powyższym kodzie nie ma kolizji, gdyż nie wiem jak to napisać...
Proszę o pomoc, gdyż to stoi mi na drodze, aby zacząć tworzyć grę... Bardzo chcę się tego nauczyć, aby wykorzystać w przyszłości.