sxcel Temat założony przez niniejszego użytkownika |
Pomocy z ustawieniem kolizji w allegro » 2015-07-15 12:28:21 Witam mam pewien problem mianowicie piszę moją pierwszą grę w allgero c++. Moja gra ma polegać na tym, że mam bitmapę, którą ruszam wsad'em i są stałe przeszkody, które po "najechaniu" na nie mają nas cofać na początek tam gdzie zaczynaliśmy i tu pojawia się problem jak ustawić kolizje tych stałych "bloków" żeby nas teleportowały na początek? Dodam jeszcze mój kod: #include <allegro.h> #include <iostream>
int r, g, b = 255; int gracz1_x = 100, gracz1_y = 100; int przeszkoda1_x = 100, przeszkoda1_y = 161;
void kolizjeprzeszkoda1() { if( gracz1_x < przeszkoda1_x ) gracz1_x = 160; if( gracz1_y < przeszkoda1_x ) gracz1_y = 100; if( gracz1_x > przeszkoda1_y - 60 ) gracz1_x = 160; if( gracz1_y > przeszkoda1_y - 60 ) gracz1_y = 100; }
void sterowaniegracz1() { if( key[ KEY_A ] ) gracz1_x--; if( key[ KEY_D ] ) gracz1_x++; if( key[ KEY_W ] ) gracz1_y--; if( key[ KEY_S ] ) gracz1_y++; }
void kolizjemapa() { if( gracz1_x < 0 ) gracz1_x = 0; if( gracz1_y < 0 ) gracz1_y = 0; if( gracz1_x > 800 - 60 ) gracz1_x = 800 - 60; if( gracz1_y > 600 - 60 ) gracz1_y = 600 - 60; }
int main() { allegro_init(); install_keyboard(); set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 800, 600, 0, 0 ); BITMAP * bufor = NULL; BITMAP * gracz1 = NULL; BITMAP * przeszkoda1 = NULL; przeszkoda1 = load_bmp( "przeszkoda1.bmp", NULL ); bufor = create_bitmap( 800, 600 ); gracz1 = load_bmp( "gracz1.bmp", NULL ); if( !przeszkoda1 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogę załadować obrazka przeszkoda1 !" ); allegro_exit(); return 0; } if( !gracz1 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogę załadować obrazka gracz1 !" ); allegro_exit(); return 0; } if( !bufor ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie mogę utworzyć bufora !" ); allegro_exit(); return 0; } while( !key[ KEY_ESC ] ) { clear_to_color( bufor, makecol( r, g, b ) ); sterowaniegracz1(); kolizjemapa(); kolizjeprzeszkoda1(); masked_blit( gracz1, bufor, 0, 0, gracz1_x, gracz1_y, gracz1->w, gracz1->h ); masked_blit( przeszkoda1, bufor, 0, 0, przeszkoda1_x, przeszkoda1_y, przeszkoda1->w, przeszkoda1->h ); blit( bufor, screen, 0, 0, 0, 0, screen->w, screen->h ); } destroy_bitmap( przeszkoda1 ); destroy_bitmap( gracz1 ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN(); |
|
pekfos |
» 2015-07-15 12:30:21 if( gracz1_x < przeszkoda1_x ) gracz1_x = 160;
if( gracz1_y < przeszkoda1_x ) gracz1_y = 100;
if( gracz1_x > przeszkoda1_y - 60 ) gracz1_x = 160;
if( gracz1_y > przeszkoda1_y - 60 ) gracz1_y = 100;
|
Brzmi kompletnie bez sensu. |
|
sxcel Temat założony przez niniejszego użytkownika |
» 2015-07-15 12:34:32 (jestem początkującym :D) powiedz jak mam to zrobic |
|
pekfos |
» 2015-07-15 12:35:48 |
|
sxcel Temat założony przez niniejszego użytkownika |
» 2015-07-15 12:40:44 Czy mógłbyś mi napisać jak ma wyglądać taka kolizja? |
|
pekfos |
» 2015-07-15 14:50:16 |
|
« 1 » |