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

[Allegro] obsługa klawiatury

Ostatnio zmodyfikowano 2009-07-05 15:20
Autor Wiadomość
XaNeq
Temat założony przez niniejszego użytkownika
[Allegro] obsługa klawiatury
» 2009-07-05 10:55:15
Witam, dalej próbuję pisać moją grę i mam problem z poruszaniem paletki.
gdy próbuję kompilować pogram to włącza się i wyłącza.
Może mi ktoś powiedzieć co jest źle z tym kodem?
 
C/C++
#include <allegro.h>
int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT, 1024, 768, 0, 0 );
    clear_to_color( screen, makecol( 0, 255, 0 ) );
    BITMAP * NapisS = NULL;
    BITMAP * Menu = NULL;
    BITMAP * Instrukcja = NULL;
    BITMAP * Autor = NULL;
    BITMAP * Tlo = NULL;
    BITMAP * Paletka1 = NULL;
    BITMAP * Paletka2 = NULL;
    BITMAP * bufor = NULL;
   
    bufor = create_bitmap( 1024, 768 );
    if( !bufor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć bufora !" );
        allegro_exit();
        return 0;
    }
   
   
    NapisS = load_bmp( "grafika/NapisS.bmp", default_palette );
    if( !NapisS )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac Napisu!" );
        allegro_exit();
        return 0;
    }
    Menu = load_bmp( "grafika/Menu.bmp", default_palette );
    if( !Menu )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac Menu!" );
        allegro_exit();
        return 0;
    }
    blit( NapisS, screen, 0, 0, 80, 20, NapisS->w, NapisS->h );
    blit( Menu, screen, 0, 0, 80, 300, Menu->w, Menu->h );
    destroy_bitmap( NapisS );
    destroy_bitmap( Menu );
    int klawisz = 0;
    int paletka1_x = 1, paletka1_y = 350;
    int p2x = 1000, p2y = 350;
    while( !key[ KEY_ESC ] )
    {
        if( key[ KEY_1 ] )
        {
            clear_to_color( screen, makecol( 128, 128, 128 ) );
            Tlo = load_bmp( "grafika/tlo.bmp", default_palette );
            Paletka1 = load_bmp( "grafika/paletka1.bmp", default_palette );
            Paletka2 = load_bmp( "grafika/paletka2.bmp", default_palette );
            blit( bufor, screen, 0, 0, 0, 0, 1024, 768 );
            blit( Tlo, screen, 0, 0, 0, 1, Tlo->w, Tlo->h );
        }
        if( key[ KEY_UP ] ) paletka1_y--;
       
        if( key[ KEY_DOWN ] ) paletka1_y++;
       
        if( key[ KEY_W ] ) p2y--;
       
        if( key[ KEY_S ] ) p2y++;
       
        if( paletka1_y < 1 ) paletka1_y = 1;
       
        if( paletka1_y > 608 ) paletka1_y = 608;
       
        if( p2y < 1 ) p2y = 1;
       
        if( p2y > 608 ) p2y = 608;
       
        clear_to_color( bufor, makecol( 0, 255, 0 ) );
       
        if( key[ KEY_P ] )
        {
            clear_to_color( screen, makecol( 0, 255, 0 ) );
            NapisS = load_bmp( "grafika/NapisS.bmp", default_palette );
            Menu = load_bmp( "grafika/Menu.bmp", default_palette );
            blit( NapisS, screen, 0, 0, 80, 20, NapisS->w, NapisS->h );
            blit( Menu, screen, 0, 0, 80, 300, Menu->w, Menu->h );
        }
        if( key[ KEY_2 ] )
        {
            clear_to_color( screen, makecol( 0, 255, 0 ) );
            Instrukcja = load_bmp( "grafika/Instrukcja.bmp", default_palette );
            blit( Instrukcja, screen, 0, 0, 20, 20, Instrukcja->w, Instrukcja->h );
            if( !Instrukcja )
            {
                set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
                allegro_message( "Nie moge zaladowac Instrukcja.bmp!" );
                allegro_exit();
                return 0;
            }
        }
        if( key[ KEY_3 ] )
        {
            clear_to_color( screen, makecol( 0, 255, 0 ) );
            Autor = load_bmp( "grafika/autor.bmp", default_palette );
            if( !Autor )
            {
                set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
                allegro_message( "Nie moge zaladowac pliku autor.bmp!" );
                allegro_exit();
                return 0;
            }
            blit( Autor, screen, 0, 0, 20, 20, Autor->w, Autor->h );
        }
        masked_blit( Paletka1, bufor, 0, 0, paletka1_x, paletka1_y, Paletka1->w, Paletka1->h );
        masked_blit( Paletka2, bufor, 0, 0, p2x, p2y, Paletka2->w, Paletka2->h );
    }
    destroy_bitmap( Paletka1 );
    destroy_bitmap( Paletka2 );
    destroy_bitmap( Menu );
    destroy_bitmap( NapisS );
    destroy_bitmap( Tlo );
    destroy_bitmap( Autor );
    destroy_bitmap( Instrukcja );
    destroy_bitmap( bufor );
    allegro_exit();
    return 0;
}
END_OF_MAIN();
P-8235
DejaVu
» 2009-07-05 11:55:30
Cała grafika powinna być wczytana przed pętlą. Ty wczytujesz grafikę paletki w pętli while jeśli zostanie wciśnięty określony klawisz. Dodatkowo w pętli głównej chcesz wyświetlać bitmapę, która nie jest wczytana (właśnie ta owa paletka) i w konsekwencji program robi GPF'a, czyli się składa.
P-8237
XaNeq
Temat założony przez niniejszego użytkownika
» 2009-07-05 11:58:54
A jest jakaś inna możliwość żeby się wyświetlała grafika po wciśnięciu przycisku?
Bo ja np. w grze mam menu główne, 1 - graj, 2- Instrukcja i chcem żeby grafika się wyświetlała po wybraniu opcji.
P-8239
lynx
» 2009-07-05 11:59:49
BITMAPĘ wczytuj raz na początku programu. Nie potrzeba jej wczytywać 2 razy. :) ( a włściwie n razy) Popraw to, zrób wczytywanie tylko na początku programu i wtedy będziemy nadal myśleć co jest przyczyną wywalania się programu. :)


/edit o sorry nie zauwarzyłem że już to ktoś to napisał
P-8240
DejaVu
» 2009-07-05 12:00:43
Bitmapy można wczytać ale ich nie wyświetlać jeśli się nie chce.
P-8241
XaNeq
Temat założony przez niniejszego użytkownika
» 2009-07-05 12:33:02
Trochę zmieniłem ale teraz od razu się wyświetla gra tak jak bym nacisnął "1".
kod
http://wklej.org/id/116422/
P-8246
pixelmaster
» 2009-07-05 13:23:54
Podam kod z manuala.
Przed pętlą
int val = readkey();
potem zamiast
if( key[ KEY_1 ] )
daj
if(( val & 0xff ) == '1' ) /* by ASCII code */
powinno dobże działać
P-8248
XaNeq
Temat założony przez niniejszego użytkownika
» 2009-07-05 13:32:43
Działa :)
Dzięki za pomoc.
//edit
Ale teraz jak nacisnę obojętnie jaki klawisz to mi się włącza gra.
Ja chcę że np. naciskam 1 i mam gre naciskam 2 i mam instrukcję.
P-8249
« 1 » 2
  Strona 1 z 2 Następna strona