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

[Allegro] Kierunek postaci

Ostatnio zmodyfikowano 2011-10-09 18:44
Autor Wiadomość
szymski
Temat założony przez niniejszego użytkownika
[Allegro] Kierunek postaci
» 2011-10-09 14:57:33
Witam! Języka C++ uczę się dopiero miesiąc, ale postanowiłem napisać jakąś grę używając biblioteki Allegro.
Wszystko jest dobrze oprócz tego że gdy chodzę ludkiem i stanę w miejscu, to jest on obrócony w jedną stronę. Próbowałem wstawiać warunki i inne takie, ale nic z tego nie wyszło. Oto kod:
C/C++
#include <allegro.h>
#include <winalleg.h>

volatile long speed = 0;
void increment_speed()
{
    speed = speed = 2;
}
END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );
int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 32 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 80 ) );
   
    BITMAP * tlo = NULL;
    BITMAP * bufor = NULL;
    BITMAP * bufor2 = NULL;
    BITMAP * ludek1 = NULL;
    BITMAP * ludek2 = NULL;
    BITMAP * ludek3 = NULL;
   
    bufor = create_bitmap( 800, 600 );
    if( !bufor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogê utworzyæ bufora !" );
        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;
    }
   
   
   
   
    ludek0 = load_bmp( "ludek.bmp", default_palette );
    ludek1 = load_bmp( "ludek2.bmp", default_palette );
    ludek2 = load_bmp( "ludek3.bmp", default_palette );
    ludek3 = load_bmp( "ludek4.bmp", default_palette );
   
    int ludek_x = 400, ludek_y = 436;
    int frame = 0;
    int kierunek = 0;
   
    while( !key[ KEY_ESC ] )
    {
        while( speed > 0 )
        {
           
            if( key[ KEY_LEFT ] )
            {
                ludek_x--;
                kierunek = 1;
            }
           
            if( key[ KEY_RIGHT ] )
            {
                ludek_x++;
                kierunek = 0;
            }
           
            speed--;
           
            if( frame > 40 ) frame = 0;
           
        }
        textout_ex( screen, font, "Melker - Platformowa przygoda PRE 0.0.2.2", 20, 20, makecol( 255, 255, 0 ), - 1 );
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        blit( tlo, bufor, 0, 0, 0, 0, tlo->w, tlo->h );
       
        if( !key[ KEY_LEFT ] && !key[ KEY_RIGHT ] )
        {
            if( kierunek = 1 ) draw_sprite( bufor, ludek1, ludek_x, ludek_y );
           
            if( kierunek = 0 ) draw_sprite( bufor, ludek0, ludek_x, ludek_y );
           
        }
       
        if( key[ KEY_LEFT ] && key[ KEY_RIGHT ] )
        {
            clear_to_color( bufor, makecol( 150, 150, 150 ) );
        }
       
        if( key[ KEY_RIGHT ] )
        {
            draw_sprite( bufor, ludek0, ludek_x, ludek_y );
        }
       
        if( key[ KEY_LEFT ] )
        {
            draw_sprite( bufor, ludek1, ludek_x, ludek_y );
        }
       
       
       
        blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
    }
   
    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();
Wiem że kod nie wygląda najlepiej, ale w związku z tym że z tą biblioteką dopiero zaczynam, nie oczekujcie ode mnie czegoś lepszego.
P-41878
SeaMonster131
» 2011-10-09 15:44:57
No bo masz tylko albo kierunek to 0, albo kierunek to 1, więc wyświetlasz postać albo w prawo albo w lewo, tak mi się wydaje, bo trudno zobaczyć co tam masz w tym kodzie, gdzie jest wiele nieuporządkowanych if'ów :P
C/C++
int kierunek = 0;

//... w petli:

if( kierunek == 0 )
     wys_bitmape( ludek_stojacy );

if( kierunek == 1 )
     wys_bitmape( ludek_w_prawo );

if( kierunek == 2 )
     wys_bitmape( ludek_w_lewo );

//...

if( klawisz_w_lewo )
{
    kierunek = 2;
    x--;
}
else if( klawisz_w_prawo )
{
    kierunek = 1;
    x++;
}
else
     kierunek = 0;
Jakoś tak powinno być.

Ale ogólnie jak dopiero miesiąc się C++ uczysz to nie bierz się za bibliotekę 2D, porywasz się na głęboką wodę, ale wybór należy do Ciebie... ;p
P-41880
szymski
Temat założony przez niniejszego użytkownika
» 2011-10-09 18:44:03
Dzięki :) Po małej modyfikacji kodu wszystko jest ok. Zaraz zabiorę się za animacje postaci.
P-41883
« 1 »
  Strona 1 z 1