Ven_64 Temat założony przez niniejszego użytkownika |
[allegro 4] zbugowane obrazki » 2013-10-20 15:08:10 Ostatnio napotkałem problem, z obrazkami w mojej grze, chodzi o obrazki meteorów, które mają lecieć na gracza. Sytuacja wygląda tak, mam jeden obrazek meteorytu, w grze korzystam z niego wielokrotnie i jest ładowany do bufora. Niestety z nieznanych mi przyczyn obrazek migocze i jest w pół przezroczysty. Dzieje się tak nawet, gdy nie porusza się. Proszę o pomoc bo już nie wiem co może być źle. FRAGMENT KODU: cykl++; q = 0; if( cykl >= co_ile_cykli && ilosc_meteorytow < 15 ) { cykl = 0; ilosc_meteorytow++; pozycja_m_y[ ilosc_meteorytow ] = losuj( 9 ); pozycja_m_y[ ilosc_meteorytow ] = pozycja_m_y[ ilosc_meteorytow ] * 50; pozycja_m_x[ ilosc_meteorytow ] = 560; } while( q <= ilosc_meteorytow ) { blit( tlo, bufor, 0, 0, 0, 0, tlo->w, tlo->h ); if( ilosc_meteorytow > 0 ) masked_blit( meteoryt, bufor, 0, 0, pozycja_m_x[ q ], pozycja_m_y[ q ], meteoryt->w, meteoryt->h ); masked_blit( statek, bufor, 0, 0, 70, statek_y, statek->w, statek->h ); blit( bufor, screen, 0, 0, 0, 0, 640, 480 ); q++; } q = 0; while( q <= ilosc_meteorytow ) { pozycja_m_x[ q ] --; if( pozycja_m_x[ q ] == 0 ) { pozycja_m_x[ q ] = 560; pozycja_m_y[ q ] = losuj( 9 ) * 50; } q++;
|
|
Ven_64 Temat założony przez niniejszego użytkownika |
» 2013-10-21 14:09:21 Daje cały kod (z małymi poprawkami), może tam jest błąd: #include <iostream> #include <cstdlib> #include <ctime> #include <allegro.h> volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed ); int losuj( int max_los ) { return( rand() % max_los ) + 0; } int main() { srand( time( NULL ) ); allegro_init(); install_keyboard(); set_color_depth( 24 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 105 ) ); BITMAP * meteoryt = NULL; BITMAP * bufor = NULL; BITMAP * statek = NULL; BITMAP * tlo = NULL; int co_ile_cykli = 700; int q = 0; int pozycja_m_y[ 12 ]; int pozycja_m_x[ 12 ]; int ilosc_meteorytow = 0; int cykl = 0; meteoryt = load_bmp( "meteoryt.bmp", default_palette ); if( !meteoryt ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogê za³adowaæ obrazka meteoryt !" ); allegro_exit(); return 0; } bufor = create_bitmap( 640, 480 ); if( !bufor ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie mogê utworzyæ bufora !" ); allegro_exit(); return 0; } statek = load_bmp( "statek.bmp", default_palette ); if( !statek ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogê za³adowaæ obrazka statek !" ); allegro_exit(); return 0; } tlo = load_bmp( "tlo.bmp", default_palette ); if( !tlo ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogê za³adowaæ obrazka tlo !" ); allegro_exit(); return 0; } int statek_y = 220; while( !key[ KEY_ESC ] ) { while( speed > 0 ) { if( statek_y != 5 ) { if( key[ KEY_UP ] ) statek_y--; } if( statek_y != 420 ) { if( key[ KEY_DOWN ] ) statek_y++; } speed--; } cykl++; q = 0; if( cykl >= co_ile_cykli && ilosc_meteorytow <= 12 ) { cykl = 0; ilosc_meteorytow++; pozycja_m_y[ ilosc_meteorytow ] = losuj( 9 ); pozycja_m_y[ ilosc_meteorytow ] = pozycja_m_y[ ilosc_meteorytow ] * 50; pozycja_m_x[ ilosc_meteorytow ] = 560; co_ile_cykli -= 15; } while( q <= ilosc_meteorytow ) { blit( tlo, bufor, 0, 0, 0, 0, tlo->w, tlo->h ); if( ilosc_meteorytow > 0 ) { masked_blit( meteoryt, bufor, 0, 0, pozycja_m_x[ q ], pozycja_m_y[ q ], meteoryt->w, meteoryt->h ); } masked_blit( statek, bufor, 0, 0, 70, statek_y, statek->w, statek->h ); blit( bufor, screen, 0, 0, 0, 0, 640, 480 ); q++; } q = 0; while( q <= ilosc_meteorytow ) { pozycja_m_x[ q ] --; if( pozycja_m_x[ q ] == 0 ) { pozycja_m_x[ q ] = 560; pozycja_m_y[ q ] = losuj( 9 ) * 50; } q++; } } remove_int( increment_speed ); destroy_bitmap( statek ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN();
|
|
maly |
» 2013-10-21 15:02:36 Nieznam Allegro ale blit( bufor, screen,... chyba powinien być poza pętlą. |
|
Ven_64 Temat założony przez niniejszego użytkownika |
» 2013-10-21 15:25:07 Dzięki, teraz wyświetla się dobrze, tylko widać naraz góra jeden i po chwili się wyłącza, ale z tym już sobie chyba poradzę :) |
|
« 1 » |