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

[Allegro] Animacja

Ostatnio zmodyfikowano 2012-06-10 11:42
Autor Wiadomość
Forczek
Temat założony przez niniejszego użytkownika
[Allegro] Animacja
» 2012-06-08 17:01:23
Kod:

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 );
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 150 ) );
   
    BITMAP * bufor = NULL;
    BITMAP * ludek = NULL;
    BITMAP * ludek0 = NULL;
    BITMAP * ludek1 = NULL;
    BITMAP * ludek2 = NULL;
    BITMAP * ludek3 = NULL;
    BITMAP * ludek4 = NULL;
    BITMAP * ludek5 = NULL;
   
    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;
    }
   
    ludek = load_bmp( "ludek.bmp", default_palette );
    ludek0 = load_bmp( "ludek0.bmp", default_palette );
    ludek1 = load_bmp( "ludek1.bmp", default_palette );
    ludek2 = load_bmp( "ludek2.bmp", default_palette );
    ludek3 = load_bmp( "ludek3.bmp", default_palette );
    ludek4 = load_bmp( "ludek4.bmp", default_palette );
    ludek5 = load_bmp( "ludek5.bmp", default_palette );
   
    int ludek_x = 100, ludek_y = 100;
    int frame = 0;
   
    while( !key[ KEY_ESC ] )
    {
        while( speed > 0 )
        {
           
            if( key[ KEY_LEFT ] ) ludek_x--;
           
            if( key[ KEY_RIGHT ] ) ludek_x++;
           
            if( key[ KEY_UP ] ) ludek_y--;
           
            if( key[ KEY_DOWN ] ) ludek_y++;
           
            speed--;
           
            frame++;
            if( frame > 80 ) frame = 0;
           
        }
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
       
        if( key[ KEY_LEFT ] )
        {
            if( frame < 75 ) { draw_sprite( bufor, ludek, ludek_x, ludek_y ); }
            else if( frame >= 75 && frame < 150 ) { draw_sprite( bufor, ludek4, ludek_x, ludek_y ); }
        }
        if( key[ KEY_RIGHT ] )
        {
            if( frame < 75 ) { draw_sprite( bufor, ludek, ludek_x, ludek_y ); }
            else if( frame >= 75 && frame < 150 ) { draw_sprite( bufor, ludek4, ludek_x, ludek_y ); }
        }
        if( key[ KEY_UP ] )
        {
            if( frame < 75 ) { draw_sprite( bufor, ludek, ludek_x, ludek_y ); }
            else if( frame >= 75 && frame < 150 ) { draw_sprite( bufor, ludek4, ludek_x, ludek_y ); }
        }
        if( key[ KEY_DOWN ] )
        {
            if( frame < 75 ) { draw_sprite( bufor, ludek, ludek_x, ludek_y ); }
            else if( frame >= 75 && frame < 150 ) { draw_sprite( bufor, ludek4, ludek_x, ludek_y ); }
        }
        masked_blit( ludek, bufor, 0, 0, ludek_x, ludek_y, ludek->w, ludek->h );
        blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
    }
    remove_int( increment_speed );
    destroy_bitmap( ludek0 );
    destroy_bitmap( ludek1 );
    destroy_bitmap( ludek2 );
    destroy_bitmap( ludek3 );
    destroy_bitmap( bufor );
    allegro_exit();
    return 0;
}
END_OF_MAIN();

Chodzi tu o to, że animacja działa po naciśnięciu klawisza. I gdy naciskam, animacja nakłada się na obrazek domyślny. A jak  nie dam domyślnego: "masked_blit( ludek, bufor, 0, 0, ludek_x, ludek_y, ludek->w, ludek->h );" to wtedy jest pusto i widać tylko animacje jak się naciśnie klawisz. Jak zrobić aby było widać postać, a jak się naciśnie klawisz to aby nie nakładały się obrazy. Może trochę pokręcenie napisałem :P
P-58102
SeaMonster131
» 2012-06-08 20:46:40
C/C++
if( klawisz w lewo )
{
    frame++;
    ...
}
else if( klawisz w prawo )
{
    frame++;
    ...
}
else if( klawisz do gory )
{
    frame++;
    ...
}
else if( klawisz na dol )
{
    frame++;
    ...
}
else
{
    frame = 0;
    ...
}
Tam gdzie kropki dajesz rysowanie gracza. To tylko przykład, bo można kod też inaczej napisać.
P-58114
Forczek
Temat założony przez niniejszego użytkownika
» 2012-06-09 13:58:39
Nie pomogło, nadal postacie się na siebie nakładają.
P-58130
SeaMonster131
» 2012-06-09 14:17:24
Zrobiłeś dokladnie tak jak Ci powiedziałem? Nigdzie więcej nie rysujesz gracza?
P-58131
Forczek
Temat założony przez niniejszego użytkownika
» 2012-06-09 18:11:16
Zrobiłem tak że rysuje go tylko jak jest ruch. No i wtedy jak stoi to go nie ma. I jak się rusza to wtedy go widać i normalnie animacje. A jak dam go poza warunkiem if żeby normalnie był to się nakłada.
P-58134
SeaMonster131
» 2012-06-09 23:04:26
To zrób tak jak ja Ci napisałem. Wystarczy, że zmienisz konstrukcje: if() {}, if() {} ... na if() {}, else if() {}, else.
A problemu nie będzie.
P-58148
Forczek
Temat założony przez niniejszego użytkownika
» 2012-06-10 11:42:42
Ok, popróbuje jeszcze, dzięki wielkie. Chyba widzę błąd.
P-58158
« 1 »
  Strona 1 z 1