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

[C++, Allegro5] Wyświetlanie i ładowanie

Ostatnio zmodyfikowano 2011-04-17 14:58
Autor Wiadomość
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.

C/C++
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ąć?
P-30922
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.
P-30923
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ć ;/
P-30924
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
P-30925
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2011-04-17 13:15:03
Ok..to zrobiłem like @ison:

C/C++
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 :)
P-30926
malan
» 2011-04-17 13:24:37
Ciii, mnie tu nie ma... @SeaMonster131: » Kurs C++ » Poziom 1Warunek wielokrotnego wyboru switch ... case lekcja
P-30927
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 :)
P-30929
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

C/C++
#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 );
}
P-30930
« 1 » 2
  Strona 1 z 2 Następna strona