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

[Allegro] Nakładanie 2 obrazków.

Ostatnio zmodyfikowano 2008-08-11 23:49
Autor Wiadomość
grabon
Temat założony przez niniejszego użytkownika
[Allegro] Nakładanie 2 obrazków.
» 2008-08-11 22:05:03
Jak wyświetlić dwa obrazki jeden na drugim, mi wyświetla się tylko jeden -> tlo.pcx


C/C++
#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()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT, 1024, 768, 0, 0 );
   
   
    BITMAP * bufor = NULL;
    BITMAP * old = NULL;
    BITMAP * tlo = NULL;
   
    bufor = create_bitmap( 1024, 768 );
   
    old = load_pcx( "Data/old.pcx", default_palette );
    tlo = load_pcx( "Data/tlo.pcx", default_palette );
   
   
    int old_x = 100, old_y = 100;
    int tlo_x = 0, tlo_y = 0;
   
   
   
    while( !key[ KEY_ESC ] )
    {
        if(( key[ KEY_A ] ) &&( old_x > 0 ) ) old_x--;
       
        if(( key[ KEY_D ] ) &&( old_x < 960 ) ) old_x++;
       
        if(( key[ KEY_W ] ) &&( old_y > 0 ) ) old_y--;
       
        if(( key[ KEY_S ] ) &&( old_y < 704 ) ) old_y++;
       
       
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        rest( 10 );
       
       
        masked_blit( old, bufor, 0, 0, old_x, old_y, old->w, old->h );
        masked_blit( tlo, bufor, 0, 0, tlo_x, tlo_y, tlo->w, tlo->h );
        blit( bufor, screen, 0, 0, 0, 0, 1024, 768 );
    }
   
    destroy_bitmap( old );
    destroy_bitmap( tlo );
    destroy_bitmap( bufor );
    allegro_exit();
    return 0;
}
END_OF_MAIN();
P-1256
DejaVu
» 2008-08-11 23:13:13
Widzisz tylko jeden obrazek, ponieważ zgodnie z fragmentem kodu:
C/C++
masked_blit( old, bufor, 0, 0, old_x, old_y, old->w, old->h );
masked_blit( tlo, bufor, 0, 0, tlo_x, tlo_y, tlo->w, tlo->h );

Wynika, że najpierw rysujesz old, a później na nim rysujesz tlo. Tło prawdopodobnie ma wymiary takie jak rozdzielczość ekranu, więc tłem zakrywasz cały obrazek wcześniej naniesiony do bufora. Zmień kolejność linijek na:
C/C++
masked_blit( tlo, bufor, 0, 0, tlo_x, tlo_y, tlo->w, tlo->h );
masked_blit( old, bufor, 0, 0, old_x, old_y, old->w, old->h );
P-1257
grabon
Temat założony przez niniejszego użytkownika
» 2008-08-11 23:49:46
Wielkie dzięki, pomogło, fakt faktem, że mogłem trochę pomyśleć ;)
Zmieniałem kolejność wczytywania, a o kolejności wyświetlania nie pomyślałem.
P-1258
« 1 »
  Strona 1 z 1