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

Problemy z tworzeniem gry w Allegro

Ostatnio zmodyfikowano 2009-04-29 23:51
Autor Wiadomość
programista12
Temat założony przez niniejszego użytkownika
Problemy z tworzeniem gry w Allegro
» 2009-04-28 07:35:53
Witam!
Od trzech dni piszę swoją grę i od trzech dni mam problem: chcę, aby po kliknięciu na obrazek kolor1 zmienił się na kolor1a. Procedura wygląda tak:
C/C++
if( mx <= 100 && my <= 100 && mb == 1 )
{
    draw_sprite( bufor, kolor1a, 100, 100 );
}
Jednak obrazek pozostaje taki sam. Próbowałem na wszelkie możliwe sposoby. Powyższa linijka kodu jest umieszczona w pętli:
C/C++
while( !key[ KEY_ESC ] ) { }
Obrazek jest wyświetlany w pozycji X:100 i pozycji Y:100. Użyłem funkcji myszka(), przed wyświetleniem innych obrazków wyświetliłem bufor, usunąłem z pamięci wszystkie obrazki (bufor też). Bardzo proszę o pomoc.
P-6116
WunM
» 2009-04-28 13:56:42
To zależy kiedy wyświetlasz obrazek kolor1 a kolor1a Np:

Jeśli najpierw (w kodzie) wyświetlasz kolor1a a potem kolor1 to już błąd bo obrazek kolor1 bedzie zawsze na wierzchu. Proponuję if-a dać po wyśiwetleniu obrazka kolor1. Mam nadzieję że mnie zrozumiałeś ;)
P-6120
DejaVu
» 2009-04-28 14:34:56
C/C++
bool bInny = false; //przed pętlą


if( mx <= 100 && my <= 100 && mb == 1 )
{
    bInny = true;
} //if

if( bInny == false )
{
    //rysuj obrazek 1
} else
{
    //rysuj obrazek 2
} //else
P-6125
programista12
Temat założony przez niniejszego użytkownika
» 2009-04-28 18:22:43
O ile dobrze zrozumiałem i przeczytałem to powinno wyglądać tak:
C/C++
bool bInny = false;
while( !key[ KEY_ESC ] )
{
    if( mx <= 100 && my <= 100 && mb == 1 )
    {
        bInny = true;
    }
   
    if( bInny == false )
    {
        draw_sprite( kolor1, bufor, 100, 100 );
    }
    else
    {
        draw_sprite( kolor1a, bufor, 100, 100 );
    }
}

Jednak dalej nic nie działa. Próbowałem zamiast myszki dać np. spację, ale drugi obrazek dalej się nie pokazywał. Nawet próbowałem wyświetlić obrazek w innej pozycji na ekranie i nie wyświetlać go na buforze, ale bezpośrednio na ekranie - nic nie dało :(
P-6135
lynx
» 2009-04-28 18:37:52
Masz źle napisany warunek względem obrazka.
Zamiast:
C/C++
if( mx <= 100 && my <= 100 && mb == 1 )
{
    bInny = true;
}



//NAPISZ

if( mx > 100 && mx < 200 && my > 100 && my < 200 && mb == 1 )
{
    bInny = true;
}
Ten warunek co teraz napisałem jest prawidłowy dla wyświetlanego obarzka o współrzędnych x - 100, oraz y - 100 (twój był dla współrzędnych x-0,y-0, jednak obrazek był wyświetlany w x-100,y-100) oraz szerokości i długości równej 100.
P-6136
programista12
Temat założony przez niniejszego użytkownika
» 2009-04-28 19:36:07
OK, zmieniłem tą linijkę jak radziłeś, ale dalej nic nie działa. Może błąd leży w innej części mojego kodu. Oto kod:
C/C++
#include <allegro.h>

int mx = 0, my = 0, mb = 0;

void myszka()
{
    if( mx != mouse_x || my != mouse_y || mb != mouse_b )
    {
        mx = mouse_x;
        my = mouse_y;
        mb = mouse_b;
    }
};

int main()
{
    //-------------------------
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
    clear_to_color( screen, makecol( 128, 128, 128 ) );
    install_mouse();
    show_mouse( screen );
    unscare_mouse();
    myszka();
    //-------------------------
    BITMAP * kolor1 = NULL;
    BITMAP * kolor2 = NULL;
    BITMAP * kolor3 = NULL;
    BITMAP * kolor4 = NULL;
    BITMAP * kolor1a = NULL;
    BITMAP * kolor2a = NULL;
    BITMAP * kolor3a = NULL;
    BITMAP * kolor4a = NULL;
    //-------------------------
    kolor1 = load_bmp( "1.bmp", default_palette );
    kolor2 = load_bmp( "2.bmp", default_palette );
    kolor3 = load_bmp( "3.bmp", default_palette );
    kolor4 = load_bmp( "4.bmp", default_palette );
    kolor1a = load_bmp( "1a.bmp", default_palette );
    kolor2a = load_bmp( "2a.bmp", default_palette );
    kolor3a = load_bmp( "3a.bmp", default_palette );
    kolor4a = load_bmp( "4a.bmp", default_palette );
    if( !kolor1 )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie znaleziono obrazka 1.bmp!" );
        allegro_exit();
        return 0;
    }
    if( !kolor2 )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie znaleziono obrazka 2.bmp!" );
        allegro_exit();
        return 0;
    }
    if( !kolor3 )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie znaleziono obrazka 3.bmp!" );
        allegro_exit();
        return 0;
    }
    if( !kolor1a )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie znaleziono obrazka 1a.bmp!" );
        allegro_exit();
        return 0;
    }
    if( !kolor2a )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie znaleziono obrazka 2a.bmp!" );
        allegro_exit();
        return 0;
    }
    if( !kolor3a )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie znaleziono obrazka 3a.bmp!" );
        allegro_exit();
        return 0;
    }
    if( !kolor4 )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie znaleziono obrazka 4.bmp!" );
        allegro_exit();
        return 0;
    }
    if( !kolor4a )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie znaleziono obrazka 4a.bmp!" );
        allegro_exit();
        return 0;
    }
    //-------------------------
    blit( kolor1, screen, 0, 0, 100, 100, kolor1->w, kolor1->h );
    blit( kolor2, screen, 0, 0, 132, 100, kolor2->w, kolor2->h );
    blit( kolor3, screen, 0, 0, 164, 100, kolor3->w, kolor3->h );
    blit( kolor4, screen, 0, 0, 196, 100, kolor4->w, kolor4->h );
    //-------------------------
    destroy_bitmap( kolor1 );
    destroy_bitmap( kolor2 );
    destroy_bitmap( kolor3 );
    destroy_bitmap( kolor1a );
    destroy_bitmap( kolor2a );
    destroy_bitmap( kolor3a );
   
    bool bInny = false;
    while( !key[ KEY_ESC ] )
    {
        if( mx > 100 && mx < 200 && my > 100 && my < 200 && mb == 1 )
        {
            bInny = true;
        }
       
        if( bInny == false )
        {
            draw_sprite( kolor1, screen, 100, 100 );
        }
        else
        {
            draw_sprite( kolor1a, screen, 100, 100 );
        }
    }
    //-------------------------
    allegro_exit();
    return 0;
}
END_OF_MAIN();
P-6142
DejaVu
» 2009-04-28 19:41:06
funkcja myszka() powinna być wywoływana w pętli.
P-6143
programista12
Temat założony przez niniejszego użytkownika
» 2009-04-28 19:48:51
Niestety. Dalej nic :(
P-6147
« 1 » 2
  Strona 1 z 2 Następna strona