hakr1921 Temat założony przez niniejszego użytkownika |
Problem z animacją » 2012-03-28 20:46:58 A więc tak, chciałem robić wszystko według poradnika lecz niestety, mój kod jest inny niż części poradnika i nie wiem jak za bardzo ogarnąć to if( frame < 20 ) { draw_sprite( bufor, ludek0, ludek_x, ludek_y ); } else if( frame >= 20 && frame < 40 ) { draw_sprite( bufor, ludek1, ludek_x, ludek_y ); } else if( frame >= 40 && frame < 60 ) { draw_sprite( bufor, ludek2, ludek_x, ludek_y ); } else if( frame >= 60 && frame < 80 ) { draw_sprite( bufor, ludek3, ludek_x, ludek_y ); }
Mój kod class Cpostac { public: short int x, y; short int s, w; };
bool kolizja( int x1, int y1, int s1, int w1, int x2, int y2, int s2, int w2 ) { if( x2 <= x1 + s1 && x2 > x1 && y2 >= y1 && y2 <= y1 + w1 ) return true; else if( x2 <= x1 + s1 && x2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 ) return true; else if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 >= y1 && y2 <= y1 + w1 ) return true; else if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 ) return true; else return false; }; bool kolizjaprawo( int x1, int y1, int s1, int w1 ) { if( x1 > 603 ) return true; else return false; }; bool kolizjadol( int x1, int y1, int s1, int w1 ) { if( y1 > 445 ) return true; else return false; }; bool kolizjalewo( int x1, int y1, int s1, int w1 ) { if( x1 < 0 ) return true; else return false; }; bool kolizjagora( int x1, int y1, int s1, int w1 ) { if( y1 < 0 ) return true; else return false; };
Cpostac ludek1, ludek2;
#include <allegro.h>
volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
int main() { double przys = 1; int frame = 0; allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 250 ) ); BITMAP * bufor = NULL; BITMAP * ludekb1 = NULL; BITMAP * ludekb12 = NULL; BITMAP * ludekb13 = NULL; BITMAP * ludekb14 = NULL; BITMAP * ludekb2 = NULL; bufor = create_bitmap( 640, 480 ); ludekb1 = load_bmp( "ludekb1.bmp", default_palette ); ludekb12 = load_bmp( "ludekb12.bmp", default_palette ); ludekb13 = load_bmp( "ludekb13.bmp", default_palette ); ludekb14 = load_bmp( "ludekb14.bmp", default_palette ); ludekb2 = load_bmp( "ludekb2.bmp", default_palette ); ludek1.x = 100; ludek1.y = 100; ludek1.s = 40; ludek1.w = 40; ludek2.x = 300; ludek2.y = 100; ludek2.s = 40; ludek2.w = 40; while( !key[ KEY_ESC ] ) { while( speed > 0 ) { if( key[ KEY_LEFT ] ) ludek1.x--, ludek1.x -= przys; if( key[ KEY_RIGHT ] ) ludek1.x++, ludek1.x += przys; if( key[ KEY_UP ] ) ludek1.y--, ludek1.y -= przys; if( key[ KEY_DOWN ] ) ludek1.y++, ludek1.y += przys; if( ludek1.x > ludek2.x ) ludek2.x++; if( ludek1.x < ludek2.x ) ludek2.x--; if( ludek1.y > ludek2.y ) ludek2.y++; if( ludek1.y < ludek2.y ) ludek2.y--; speed--; frame++; if( frame > 80 ) frame = 0; } clear_to_color( bufor, makecol( 150, 150, 150 ) ); if( frame < 20 ) { draw_sprite( bufor, ludekb1, ludek1.x, ludek1.y ); } if( frame >= 20 && frame < 40 ) { draw_sprite( bufor, ludekb12, ludek.x, ludek1.y ); } if( frame >= 40 && frame < 60 ) { draw_sprite( bufor, ludekb13, ludek.x, ludek1.y ); } if( frame >= 60 && frame < 80 ) { draw_sprite( bufor, ludekb14, ludek.x, ludek1.y ); } masked_blit( ludekb1, bufor, 0, 0, ludek1.x, ludek1.y, ludek1.s, ludek1.w ); masked_blit( ludekb2, bufor, 0, 0, ludek2.x, ludek2.y, ludek2.s, ludek2.w ); if( kolizja( ludek1.x, ludek1.y, ludek1.s, ludek1.w, ludek2.x, ludek2.y, ludek2.s, ludek2.w ) == true ) { ludek2.x = 50, ludek2.y = 50; } if( kolizjaprawo( ludek1.x, ludek1.y, ludek1.s, ludek1.w ) == true ) { speed--, ludek1.x--; } if( kolizjadol( ludek1.x, ludek1.y, ludek1.s, ludek1.w ) == true ) { speed--, ludek1.y--; } if( kolizjalewo( ludek1.x, ludek1.y, ludek1.s, ludek1.w ) == true ) { speed--, ludek1.x++; } if( kolizjagora( ludek1.x, ludek1.y, ludek1.s, ludek1.w ) == true ) { speed--, ludek1.y++; } blit( bufor, screen, 0, 0, 0, 0, 640, 480 ); } destroy_bitmap( ludekb12 ); destroy_bitmap( ludekb13 ); destroy_bitmap( ludekb14 ); destroy_bitmap( bufor ); destroy_bitmap( ludekb1 ); destroy_bitmap( ludekb2 ); allegro_exit(); return 0; } END_OF_MAIN();
|