Bartaz Temat założony przez niniejszego użytkownika |
C++ allegro myszka » 2010-04-05 13:00:33 Witam mam taki problem bo chce ,że jezeli myszka znajdzie się na bitmapie przycisk to cos tam(tu akurat jest ,że ta bitmapa ma się przesunąć...zeby sprawdzic czy dziala) Ale ani bitmapa sie nie przesówa a jak daje żeby pokazywało x i y myszki to jest napis ale pozycja wcale się nie zmienia. Kod: #include <allegro.h>
BITMAP * bufor = NULL; BITMAP * gui = NULL; BITMAP * przycisk = NULL; class pozycje { public: int x; int y; int w; int s; };
int a = 170; int b = 30; int c = 70;
int mx = 0, my = 0, mb = 0; void myszka() { if( mx != mouse_x || my != mouse_y || mb != mouse_b ) { mx = mouse_x; my = mouse_y; mb = mouse_b; } };
int main() { allegro_init(); install_keyboard(); install_timer(); set_gfx_mode( GFX_AUTODETECT, 500, 150, 0, 0 ); pozycje przyciska; przyciska.x = 3, przyciska.y = 0, przyciska.w = 30, przyciska.s = 70; bufor = create_bitmap( 500, 150 ); gui = create_bitmap( 500, 30 ); przycisk = create_bitmap( 70, 70 ); clear_to_color( bufor, makecol( 150, 150, 150 ) ); clear_to_color( gui, makecol( 100, 100, 100 ) ); clear_to_color( przycisk, makecol( 10, 100, 70 ) ); while( !key[ KEY_ESC ] ) { myszka(); textprintf_ex( bufor, font, 20, 40, makecol( 30, 200, 30 ), - 1, "Myszka x = %d, y = %d, klawisz = %d !", mx, my, mb ); if( mx > przyciska.x && mx < przyciska.x + przyciska.w && my > przyciska.y && my < przyciska.y + przyciska.s ) { przyciska.x++; } masked_blit( gui, bufor, 0, 0, 0, 0, 500, 150 ); masked_blit( przycisk, bufor, 0, 0, przyciska.x, przyciska.y, przyciska.s, przyciska.w ); textout_ex( bufor, font, "PLAY", 20, 10, makecol( 170, 30, 70 ), - 1 ); blit( bufor, screen, 0, 0, 0, 0, 500, 150 ); } allegro_exit(); return( 0 ); } END_OF_MAIN();
|
|
szyx_yankez |
» 2010-04-05 13:36:38 bool button( int x, int y, BITMAP * bmp ) { if( mouse_x > x && mouse_x < x + bmp->w && mouse_y > y && mouse_y < y + bmp->h ) return true; else return false; }
int x( 100 ), y( 100 ); BITMAP * obrazek = NULL; obrazek = create_bitmap( 1023, 767 );
while( !keypressed() ) { if( button( x, y, obrazek ) == true ) x++; blit( obrazek, bufor, 0, 0, x, y, 1023, 767 ); }
|
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-04-05 13:46:22 Ale to by działało tylko , że jak chce wyswietlic pozycje x i y myszki to ta pozycja wogóle sie nie zmienia nie wyswietla ise nowa kiedys tez tak mialem ale nie pamietam jak zrobilem ze dzialalo...
|
|
driver1995 |
» 2010-04-05 15:22:23 Wszystko wyjaśnione w komentarzach........ #include <allegro.h>
BITMAP * bufor = NULL; BITMAP * gui = NULL; BITMAP * przycisk = NULL; class pozycje { public: int x; int y; };
int main() { allegro_init(); install_keyboard(); install_mouse(); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 500, 150, 0, 0 ); pozycje przyciska; przyciska.x = 3, przyciska.y = 0; bufor = create_bitmap( 500, 150 ); gui = create_bitmap( 500, 30 ); przycisk = create_bitmap( 70, 30 ); clear_to_color( bufor, makecol( 150, 150, 150 ) ); clear_to_color( gui, makecol( 100, 100, 100 ) ); clear_to_color( przycisk, makecol( 10, 100, 70 ) ); while( !key[ KEY_ESC ] ) { clear_to_color( bufor, makecol( 150, 150, 150 ) ); textprintf_ex( bufor, font, 20, 40, makecol( 30, 200, 30 ), - 1, "Myszka x = %d, y = %d, klawisz = %d !", mouse_x, mouse_y, mouse_b ); if( mouse_x > przyciska.x && mouse_x < przyciska.x + przycisk->w && mouse_y > przyciska.y && mouse_y < przyciska.y + przycisk->h ) { przyciska.x++; } masked_blit( gui, bufor, 0, 0, 0, 0, 500, 150 ); masked_blit( przycisk, bufor, 0, 0, przyciska.x, przyciska.y, przycisk->w, przycisk->h ); textout_ex( bufor, font, "PLAY", 20 + przyciska.x, 10 + przyciska.y, makecol( 170, 30, 70 ), - 1 ); show_mouse( bufor ); blit( bufor, screen, 0, 0, 0, 0, 500, 150 ); } allegro_exit(); return( 0 ); } END_OF_MAIN();
|
|
malan |
» 2010-04-07 00:09:27 @Bartaz: Działa? :) // Rozumiem, że tak. Zamykam. |
|
« 1 » |