Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[allegro 4] zbugowane obrazki

Ostatnio zmodyfikowano 2013-10-21 15:25
Autor Wiadomość
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:

C/C++
cykl++;
q = 0;
if( cykl >= co_ile_cykli && ilosc_meteorytow < 15 ) // tworzenie meteorytow
{
    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 ) // rysowanie
{
    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 ) //przemieszczanie
{
    pozycja_m_x[ q ] --;
    if( pozycja_m_x[ q ] == 0 )
    {
        pozycja_m_x[ q ] = 560;
        pozycja_m_y[ q ] = losuj( 9 ) * 50;
    }
    q++;
P-94120
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:
C/C++
#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 ) // tworzenie meteorytow
        {
            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 ) // rysowanie
        {
            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 ) //przemieszczanie
        {
            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();
P-94189
maly
» 2013-10-21 15:02:36
Nieznam Allegro ale
blit( bufor, screen,...
 chyba powinien być poza pętlą.
P-94191
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ę :)
P-94192
« 1 »
  Strona 1 z 1