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

[Allegro 5] Pomoc przy eventach

Ostatnio zmodyfikowano 2014-08-07 13:49
Autor Wiadomość
CTRL85
Temat założony przez niniejszego użytkownika
[Allegro 5] Pomoc przy eventach
» 2014-08-06 23:19:30
Witam!

Po dość długiej przerwie postanowiłem powrócić i przypomnieć sobie co nieco - postanowiłem napisać platformówkę. Początkowo wszystko robiłem w Allegro 4.4 - Zrobiłem menu, sporo mechaniki - poruszanie, kolizje, odczytywanie/zapis gry, jednak stwierdziłem, że lepiej będzie (póki nie jest jeszcze za późno) przesiąść się na Allegro 5. Niestety w języku ojczystym nie ma poradników, które wychodziły by poza kompletne podstawy. Mój problem polega na tym, iż nie za bardzo pojmuję zasadę działania 'eventów' - opieram się na wiki https://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Events Być może to wina dość późnej godziny, ale za nic nie mogę zrozumieć w jakim celu miałbym to wkładać do gry. Byłbym wdzięczy, gdyby ktoś po ludzku wytłumaczył jakie korzyści to daje.

Pozdrawiam.
P-115145
SeaMonster131
» 2014-08-06 23:50:23
Eventy wykorzystuję przykładowo do timera, który ogranicza mi ilość FPS.
Zresztą, ich spis masz w dokumentacji: http://alleg.sourceforge.net​/a5docs/refman/events.html.
P-115146
CTRL85
Temat założony przez niniejszego użytkownika
» 2014-08-07 13:49:30
Dzięki.

Dobra mam taki kodzik:

C/C++
ALLEGRO_BITMAP * poziom = al_load_bitmap( "1.png" );
if( !poziom )
{
    al_show_native_message_box( okno, "Blad", "Brak trasy", "", NULL, ALLEGRO_MESSAGEBOX_ERROR );
    return;
}

ALLEGRO_BITMAP * postac = animacja_prawo_1;


ALLEGRO_EVENT_QUEUE * kolejka_zdarzen = NULL; //kolejka zdarzeń ??
ALLEGRO_TIMER * timer = NULL; //timer


timer = al_create_timer( 1.0 / FPS );
kolejka_zdarzen = al_create_event_queue();

al_register_event_source( kolejka_zdarzen, al_get_display_event_source( okno ) );
al_register_event_source( kolejka_zdarzen, al_get_timer_event_source( timer ) );

al_start_timer( timer );

Teraz powinna być pętka while(1) i wszystko poniżej będzie w timerze? W starej grze nie miałem wszystkiego w timerze - tylko sterowanie i kolizje - tak wyglądał stary kod:

C/C++
trasa = load_png( "1.png", default_palette );
if( !trasa )
{
    allegro_message( "brak pliku 1.png" );
    allegro_exit();
    return;
}

bufor = create_bitmap( trasa->w, trasa->h );
clear_to_color( bufor, makecol( 0, 0, 0 ) );

while( !key[ KEY_ESC ] )
{
    if( punkty_zycia < 1 )
    {
        ilosc_zyc--;
        punkty_zycia = 10;
    }
   
    temp = postac_x;
   
    while( timer > 0 )
    {
        sterowanie();
        kolizje();
       
        animacja++;
        timer--;
    }
   
    funkcja_animacji();
    przesuwanie_mapy();
   
    ///////////////////////////////////////////////////////////////////////////////////////
   
    blit( trasa, bufor, 0, 0, 0, 0, trasa->w, trasa->h );
    masked_blit( postac, bufor, 0, 0, postac_x, postac_y, postac->w, postac->h );
   
    blit( bufor, screen, 0, 0, mapa_x, mapa_y, trasa->w, trasa->h );
    clear_to_color( bufor, makecol( 0, 0, 0 ) );
   
}

Tak swoją drogą okropnie pokomplikowali to nowe Allegro - przy wykrywaniu kolizji z użyciem al_get_pixel() to jakaś masakra, żeby to porównać.
P-115166
« 1 »
  Strona 1 z 1