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

[Allegro] Podwójne Buforowanie nic nie daje

Ostatnio zmodyfikowano 2008-09-30 21:42
Autor Wiadomość
Tombol
Temat założony przez niniejszego użytkownika
[Allegro] Podwójne Buforowanie nic nie daje
» 2008-09-30 15:49:34
Mam problem chce zrobić po prostu wyświetlanie obrazka i on migocze niestety podwójne buforowanie nic nie daje :/
Jeżeli jest potrzeba mogę podać kod ale nie wiem czy on będzie potrzebny mam prawie wszystko identyczne jak w turtoalu :/
Chce wyświetlić 2 obrazki jak wyświetlam 1 to all jest ok ale jak już 2 to migoczą ;/
P-1730
lynx
Kod
» 2008-09-30 15:54:17
To daj zerknąć na kod, może coś wymyślimy. ;P
P-1731
Tombol
Temat założony przez niniejszego użytkownika
» 2008-09-30 16:03:04
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_WINDOWED, 640, 480, 0, 0 );
    clear_to_color( screen, makecol( 0, 0, 0 ) );
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) );
   
    BITMAP * statek = NULL;
    BITMAP * pocisk = NULL;
    BITMAP * bufors = NULL;
    BITMAP * buforp = NULL;
   
    bufors = create_bitmap( 640, 480 );
    if( !bufors )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć bufora statek !" );
        allegro_exit();
        return 0;
    }
    buforp = create_bitmap( 640, 480 );
    if( !buforp )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć bufora pocisk !" );
        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;
    }
    int statek_x = 0, statek_y = 0;
    int pocisk_x = 0, pocisk_y = 0;
    while( !key[ KEY_ESC ] )
    {
        while( speed > 0 )
        {
            if( key[ KEY_LEFT ] ) statek_x--;
           
            if( key[ KEY_RIGHT ] ) statek_x++;
           
            if( key[ KEY_A ] ) pocisk_y--;
           
           
            //  clear_to_color(bufors, makecol(0,0,0));
            //rest(10);
            speed--;
        }
       
        pocisk = load_bmp( "pocisk.bmp", default_palette );
        if( !pocisk )
        {
            set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
            allegro_message( "nie mogę załadować obrazka pocisk!" );
            allegro_exit();
            return 0;
        }
       
        //clear_to_color(screen, makecol(0,0,0));
        //rest(10);
        masked_blit( statek, bufors, 0, 0, statek_x, statek_y, statek->w, statek->h );
        masked_blit( pocisk, buforp, 0, 0, pocisk_x, pocisk_y, pocisk->w, pocisk->h );
        blit( bufors, screen, 0, 0, 0, 0, 640, 480 );
        blit( buforp, screen, 0, 0, 0, 0, 640, 480 );
       
    }
    remove_int( increment_speed );
    destroy_bitmap( statek );
    destroy_bitmap( pocisk );
    destroy_bitmap( bufors );
    destroy_bitmap( buforp );
    allegro_exit();
    return 0;
}
END_OF_MAIN();


Niestety w allegro siedzę dopiero kilka dni to nie za bardzo umiem coś zrobić ale jak ktoś mógł by mi powiedzieć jak zrobić żeby jak się naciśnie guzik to pocisk leci aż do samej góry ekranu i wtedy znika
P-1732
DejaVu
» 2008-09-30 16:34:20
Wszystko powinno być rysowane w jednym buforze, który następnie jest kopiowany na ekran. Ty posiadasz dwa bufory, co jest błędne. Problem leży w poniższym kodzie:
C/C++
blit( bufors, screen, 0, 0, 0, 0, 640, 480 );
blit( buforp, screen, 0, 0, 0, 0, 640, 480 );
P-1734
Tombol
Temat założony przez niniejszego użytkownika
» 2008-09-30 17:28:13
AAAAAAAA no spoko ale to by się przydało takie info do turtoala dopisać że może być tylko 1 bufor :P

To jeszcze bym prosił żeby ktoś mi wyjaśnił jak zrobić żeby pocisk leciał do końca ekranu potem znikł :P
P-1735
DeBugger
» 2008-09-30 18:15:45
Pomyślę nad tym pytaniem. Tylko uwaga odnośnie regulaminu. W jednym wątku może być jedno pytanie.
P-1736
grabon
» 2008-09-30 19:16:09
Tak ogólnie to powinieneś również do pocisku dopisać przemieszczanie się w pozycji x zgodnie z ruchem statku w innym wypadku statek będzie na środku ekranu a, pocisk będzie wylatywał z boku ekranu. Teraz pocisk leci Ci do góry zgodnie z linią
if( key[KEY_A]) pocisk_y--;
Umieściłeś statek i pocisk w lewym górnym rogu ekranu, to gdzie ten pocisk ma Ci polecieć ?
Co do znikania pocisku to poducz się C++. Ogólnie radzę zacząć od C++, bez tego co najwyżej przekopiujesz parę tutków i pozmieniasz w nich kilka lini kodu, to za mało jak na napisanie nawet najprostrzej gry.
Tak jak wyżej, jeden wątek == jedno pytanie.
P-1737
DeBugger
» 2008-09-30 19:48:11
Jeżeli mógłbym coś powiedzieć. Zaprogramuj sobie wektry(nie te STL-owe).
http://pl.wikipedia.org/wiki/Wektor
Najlepiej przeczytaj w dziale Fizyki.
P-1738
« 1 » 2
  Strona 1 z 2 Następna strona