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

Klatkowane Allegro

Ostatnio zmodyfikowano 2013-12-12 13:31
Autor Wiadomość
maver144
Temat założony przez niniejszego użytkownika
Klatkowane Allegro
» 2013-12-11 21:34:46
Witam mam taki oto problem, przy przyśpieszonym ruchu obraz jakby klatkuje, jak się tego pozbyć? A i jeszcze proszę sprawdzić, czy nic nie namieszałem z timerem:
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(); // inicjowanie funckji
    install_keyboard(); // instalowanie klawiaturty
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 ); // tworzenie okna
    set_palette( default_palette ); // paleta kolorów
    set_color_depth( 16 ); // głęcia kolorów 8-32 bit
   
    // Deklarowanie wskazników do bitmapy
   
    BITMAP * fatboy = NULL;
    BITMAP * bfatboy = NULL;
   
    // Ładowanie bitmap
   
    fatboy = load_bmp( "fatBoy.bmp", default_palette );
    if( !fatboy )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "nie mogę załadować obrazka fatboy !" );
        allegro_exit();
        return 0;
    }
   
   
    bfatboy = create_bitmap( 800, 600 );
    if( !bfatboy )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć bufora !" );
        allegro_exit();
        return 0;
    }
   
   
    // Wczytywany bitmapy na ekran
   
    blit( fatboy, screen, 0, 0, 100, 100, fatboy->w, fatboy->h );
   
   
   
   
   
   
   
   
    // Ruch
   
    int fatboy_x = 100, fatboy_y = 100;
   
   
    while( speed > 0 )
    {
        speed--;
        if( key[ KEY_LEFT ] ) fatboy_x--;
       
        if( key[ KEY_RIGHT ] ) fatboy_x += 25;
       
        if( key[ KEY_UP ] ) fatboy_y--;
       
        if( key[ KEY_DOWN ] ) fatboy_y++;
       
        clear_to_color( bfatboy, makecol( 150, 150, 150 ) );
        //rest(1);
        masked_blit( fatboy, bfatboy, 0, 0, fatboy_x, fatboy_y, fatboy->w, fatboy->h );
        blit( bfatboy, screen, 0, 0, 0, 0, 800, 600 );
    }
   
   
    if( key[ KEY_ESC ] ) readkey();
   
    // Zwalnanie pamięci bitmapy
   
    destroy_bitmap( fatboy );
    destroy_bitmap( bfatboy );
   
   
    // readkey(); // zatrzymanie do czasu wcisniecia dowolnego przycisku
    allegro_exit(); // zamykanie funkcji
    return 0;
}
END_OF_MAIN();
P-99018
kubawal
» 2013-12-11 21:41:30
Nie czyścisz ekranu.
P-99020
pekfos
» 2013-12-11 21:44:49
Czyści.

Źle użyłeś timera.
» Kurs Allegro 4.x, C++Timery lekcja
P-99021
maver144
Temat założony przez niniejszego użytkownika
Timer
» 2013-12-11 22:00:28
Wrzucam tutaj poprawiony, wg mnie powinien działać, ale nadal klatkuje. Proszę o poprawienie jeśli coś nadal jest zle.
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(); // inicjowanie funckji
    install_keyboard(); // instalowanie klawiaturty
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 ); // tworzenie okna
    set_palette( default_palette ); // paleta kolorów
    set_color_depth( 16 ); // głęcia kolorów 8-32 bit
   
    // Deklarowanie wskazników do bitmapy
   
    BITMAP * fatboy = NULL;
    BITMAP * bfatboy = NULL;
   
    // Ładowanie bitmap
   
    fatboy = load_bmp( "fatBoy.bmp", default_palette );
    if( !fatboy )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "nie mogę załadować obrazka fatboy !" );
        allegro_exit();
        return 0;
    }
   
   
    bfatboy = create_bitmap( 800, 600 );
    if( !bfatboy )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć bufora !" );
        allegro_exit();
        return 0;
    }
   
   
    // Wczytywany bitmapy na ekran
   
    blit( fatboy, screen, 0, 0, 100, 100, fatboy->w, fatboy->h );
   
   
   
   
   
   
   
   
    // Ruch
   
    int fatboy_x = 100, fatboy_y = 100;
   
   
    while( !key[ KEY_ESC ] )
    {
        while( speed > 0 ) {
            speed--;
            if( key[ KEY_LEFT ] ) fatboy_x--;
           
            if( key[ KEY_RIGHT ] ) fatboy_x += 3;
           
            if( key[ KEY_UP ] ) fatboy_y--;
           
            if( key[ KEY_DOWN ] ) fatboy_y++;
           
        }
        clear_to_color( bfatboy, makecol( 150, 150, 150 ) );
        //rest(1);
        masked_blit( fatboy, bfatboy, 0, 0, fatboy_x, fatboy_y, fatboy->w, fatboy->h );
        blit( bfatboy, screen, 0, 0, 0, 0, 800, 600 );
    }
   
   
   
    if( key[ KEY_ESC ] ) readkey();
   
    // Zwalnanie pamięci bitmapy
    remove_int( increment_speed );
    destroy_bitmap( fatboy );
    destroy_bitmap( bfatboy );
   
   
    // readkey(); // zatrzymanie do czasu wcisniecia dowolnego przycisku
    allegro_exit(); // zamykanie funkcji
    return 0;
}
END_OF_MAIN();
P-99026
Gabes
» 2013-12-11 23:43:12
Głębie kolorów podaj przed utworzeniem okna.
P-99032
maver144
Temat założony przez niniejszego użytkownika
Klatkowanie
» 2013-12-12 13:31:37
Pomogło ! Dzięki wielkie za odpowiedz .
P-99048
« 1 »
  Strona 1 z 1