programista12 Temat założony przez niniejszego użytkownika |
Problemy z tworzeniem gry w Allegro » 2009-04-28 07:35:53 Witam! Od trzech dni piszę swoją grę i od trzech dni mam problem: chcę, aby po kliknięciu na obrazek kolor1 zmienił się na kolor1a. Procedura wygląda tak: if( mx <= 100 && my <= 100 && mb == 1 ) { draw_sprite( bufor, kolor1a, 100, 100 ); }
Jednak obrazek pozostaje taki sam. Próbowałem na wszelkie możliwe sposoby. Powyższa linijka kodu jest umieszczona w pętli: while( !key[ KEY_ESC ] ) { }
Obrazek jest wyświetlany w pozycji X:100 i pozycji Y:100. Użyłem funkcji myszka(), przed wyświetleniem innych obrazków wyświetliłem bufor, usunąłem z pamięci wszystkie obrazki (bufor też). Bardzo proszę o pomoc. |
|
WunM |
» 2009-04-28 13:56:42 To zależy kiedy wyświetlasz obrazek kolor1 a kolor1a Np:
Jeśli najpierw (w kodzie) wyświetlasz kolor1a a potem kolor1 to już błąd bo obrazek kolor1 bedzie zawsze na wierzchu. Proponuję if-a dać po wyśiwetleniu obrazka kolor1. Mam nadzieję że mnie zrozumiałeś ;) |
|
DejaVu |
» 2009-04-28 14:34:56 bool bInny = false;
if( mx <= 100 && my <= 100 && mb == 1 ) { bInny = true; }
if( bInny == false ) { } else { }
|
|
programista12 Temat założony przez niniejszego użytkownika |
» 2009-04-28 18:22:43 O ile dobrze zrozumiałem i przeczytałem to powinno wyglądać tak: bool bInny = false; while( !key[ KEY_ESC ] ) { if( mx <= 100 && my <= 100 && mb == 1 ) { bInny = true; } if( bInny == false ) { draw_sprite( kolor1, bufor, 100, 100 ); } else { draw_sprite( kolor1a, bufor, 100, 100 ); } }
Jednak dalej nic nie działa. Próbowałem zamiast myszki dać np. spację, ale drugi obrazek dalej się nie pokazywał. Nawet próbowałem wyświetlić obrazek w innej pozycji na ekranie i nie wyświetlać go na buforze, ale bezpośrednio na ekranie - nic nie dało :( |
|
lynx |
» 2009-04-28 18:37:52 Masz źle napisany warunek względem obrazka. Zamiast: if( mx <= 100 && my <= 100 && mb == 1 ) { bInny = true; }
if( mx > 100 && mx < 200 && my > 100 && my < 200 && mb == 1 ) { bInny = true; }
Ten warunek co teraz napisałem jest prawidłowy dla wyświetlanego obarzka o współrzędnych x - 100, oraz y - 100 (twój był dla współrzędnych x-0,y-0, jednak obrazek był wyświetlany w x-100,y-100) oraz szerokości i długości równej 100. |
|
programista12 Temat założony przez niniejszego użytkownika |
» 2009-04-28 19:36:07 OK, zmieniłem tą linijkę jak radziłeś, ale dalej nic nie działa. Może błąd leży w innej części mojego kodu. Oto kod: #include <allegro.h>
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(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 ); clear_to_color( screen, makecol( 128, 128, 128 ) ); install_mouse(); show_mouse( screen ); unscare_mouse(); myszka(); BITMAP * kolor1 = NULL; BITMAP * kolor2 = NULL; BITMAP * kolor3 = NULL; BITMAP * kolor4 = NULL; BITMAP * kolor1a = NULL; BITMAP * kolor2a = NULL; BITMAP * kolor3a = NULL; BITMAP * kolor4a = NULL; kolor1 = load_bmp( "1.bmp", default_palette ); kolor2 = load_bmp( "2.bmp", default_palette ); kolor3 = load_bmp( "3.bmp", default_palette ); kolor4 = load_bmp( "4.bmp", default_palette ); kolor1a = load_bmp( "1a.bmp", default_palette ); kolor2a = load_bmp( "2a.bmp", default_palette ); kolor3a = load_bmp( "3a.bmp", default_palette ); kolor4a = load_bmp( "4a.bmp", default_palette ); if( !kolor1 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie znaleziono obrazka 1.bmp!" ); allegro_exit(); return 0; } if( !kolor2 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie znaleziono obrazka 2.bmp!" ); allegro_exit(); return 0; } if( !kolor3 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie znaleziono obrazka 3.bmp!" ); allegro_exit(); return 0; } if( !kolor1a ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie znaleziono obrazka 1a.bmp!" ); allegro_exit(); return 0; } if( !kolor2a ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie znaleziono obrazka 2a.bmp!" ); allegro_exit(); return 0; } if( !kolor3a ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie znaleziono obrazka 3a.bmp!" ); allegro_exit(); return 0; } if( !kolor4 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie znaleziono obrazka 4.bmp!" ); allegro_exit(); return 0; } if( !kolor4a ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie znaleziono obrazka 4a.bmp!" ); allegro_exit(); return 0; } blit( kolor1, screen, 0, 0, 100, 100, kolor1->w, kolor1->h ); blit( kolor2, screen, 0, 0, 132, 100, kolor2->w, kolor2->h ); blit( kolor3, screen, 0, 0, 164, 100, kolor3->w, kolor3->h ); blit( kolor4, screen, 0, 0, 196, 100, kolor4->w, kolor4->h ); destroy_bitmap( kolor1 ); destroy_bitmap( kolor2 ); destroy_bitmap( kolor3 ); destroy_bitmap( kolor1a ); destroy_bitmap( kolor2a ); destroy_bitmap( kolor3a ); bool bInny = false; while( !key[ KEY_ESC ] ) { if( mx > 100 && mx < 200 && my > 100 && my < 200 && mb == 1 ) { bInny = true; } if( bInny == false ) { draw_sprite( kolor1, screen, 100, 100 ); } else { draw_sprite( kolor1a, screen, 100, 100 ); } } allegro_exit(); return 0; } END_OF_MAIN();
|
|
DejaVu |
» 2009-04-28 19:41:06 funkcja myszka() powinna być wywoływana w pętli. |
|
programista12 Temat założony przez niniejszego użytkownika |
» 2009-04-28 19:48:51 Niestety. Dalej nic :( |
|
« 1 » 2 |