SeaMonster131 Temat założony przez niniejszego użytkownika |
[C++, Allegro5] Wyświetlanie i ładowanie » 2011-04-17 12:03:52 Siemka :) W niektórych grach przy ładowaniu elementów gry jest np takie ruchome "kółeczko" czy coś :D Ono się obraca, a te elementy gry są ładowane, w tym samym czasie. Chciałbym zrobić coś na wzór tego, lecz te "kółeczko" pojawia się (już po załadowaniu tych elementów...) na 1 sekunde i znika. if( menu.teraz == "loading" ) { menu.speedload += 0.02; al_draw_rotated_bitmap( menu.load_img, 50, 50, sz_okna / 2, dl_okna / 2, menu.speedload, 0 ); tlo = al_load_bitmap( "media/elo.bmp" ); tlo2 = al_load_bitmap( "media/elo.bmp" ); menu.teraz = "gameplay"; } else al_draw_bitmap( tlo, 0, 0, 0 ); Czyli podsumowując - chciałbym aby "kółeczko" kręciło się i jednocześnie ładowały się te elementy gry. Da się coś takiego osiągnąć? |
|
szyx_yankez |
» 2011-04-17 12:13:16 Stwórz sobie drugi wątek, w jednym ładuj dane a w drugim wyświetlaj kółeczko. Allegro5 umożliwia Ci obsługe wielowątkowości. |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2011-04-17 12:24:20 Teraz tak przeglądam dokumentacje i są opisane wątki, tylko inna sprawa jak ich użyć ;/ |
|
ison |
» 2011-04-17 12:50:32 jedna możliwość to 2 wątki a druga to animowanie kółeczka pomiędzy ładowaniem poszczególnych zasobów, często w grach przy ładowaniu jest tak że jak akurat ładuje się jakiś duży plik to kółeczko na chwilę staje *załaduj bitmapę lub coś innego *animuj *załaduj kolejną bitmapę *animuj itd |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2011-04-17 13:15:03 Ok..to zrobiłem like @ison: menu.timeload++;
menu.speedload += 0.02; al_draw_rotated_bitmap( menu.load_img, 50, 50, sz_okna / 2, dl_okna / 2, menu.speedload, 0 );
if( menu.timeload == 100 ) tlo = al_load_bitmap( "media/elo.bmp" ); else if( menu.timeload == 200 ) tlo2 = al_load_bitmap( "media/elo2.bmp" ); else if( menu.timeload == 300 ) menu.teraz = "gameplay"; Może i "kółeczko" sie zatrzymuje, ale z tymi wątkami to nie poradziłbym sobie ;p Dzięki za pomoc :) |
|
malan |
» 2011-04-17 13:24:37 |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2011-04-17 13:35:04 @malan: hehe :) Tak wg czym się różni switch od if? Bo według mnie if jest lepszy bo krótszy :) |
|
ison |
» 2011-04-17 13:47:09 niczym się nie różni, kompilator i tak zamieni to sobie na co chce :p rozwiązanie, które zaprezentowałeś jest ok do czasu kiedy bitmap do wczytania nie będzie ponad 100, nie chcesz mieć chyba w programie 100 ifów obok siebie? zrób sobie tablicę wskaźników na bitmapy oraz tablicę ścieżek i użyj fora do wczytywania i animowania paska postępu wiem że allegro ma swoje wątki, ale jeśli chcesz to możesz spróbować użyć tych windowsowych w banalny sposób - używałem ich w allegro 4.2 i działało ;) nie wiem jak sprawa wygląda z allegro 5 #include <cstdio> #include <process.h> #include <windows.h>
void odliczanie( void * param ) { for( int i = 0; i < 5; ++i ) { printf( "ODLICZANIE: %d\n", i ); Sleep( 1000 ); } }
void odliczanie_drugie( void * param ) { for( int i = 0; i < 5; ++i ) { printf( "ODLICZANIE DRUGIE: %d\n", i ); Sleep( 2000 ); } }
int main() { _beginthread( odliczanie, 0, 0 ); _beginthread( odliczanie_drugie, 0, 0 ); Sleep( 10000 ); }
|
|
« 1 » 2 |