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. |
|
SeaMonster131 |
» 2014-08-06 23:50:23 |
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2014-08-07 13:49:30 Dzięki. Dobra mam taki kodzik: 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; ALLEGRO_TIMER * timer = NULL;
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: 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ć. |
|
« 1 » |