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

[C++][Allegro] Wyświetlanie animowanych spritów. Widoczne więcej niż jedna klatka.

Ostatnio zmodyfikowano 2012-10-31 21:26
Autor Wiadomość
enzoMatrix
Temat założony przez niniejszego użytkownika
[C++][Allegro] Wyświetlanie animowanych spritów. Widoczne więcej niż jedna klatka.
» 2012-10-31 20:48:54
Witam. Mam problem z wyświetlaniem animowanej postaci. Niestety nie mam talentu graficznego i jak na razie znalazłem sprity z game makera, do którego się przymierzałem kiedyś. Problem w tym, że tam sprity postaci są w osobnych plikach, każdy obrazek do danego kierunku poruszania się. To ogarnę kiedy indziej. Ale kiedy wyświetlam animację z jednego z takich obrazków nie potrafię zrobić, żeby widoczna była tylko jedna klatka, cały czas pokazuje mi po prostu przesuwający się film. gdy kombinowałem z wartością GlownyBohater.klatka to zaczyna mi postać mrugać gdzieś około wartości 120. Przy tej animacji korzystałem z tutoriala: http://www.easykoder.vot.pl/arty/animacja_postaci trochę musiałem kod pozmieniać bo tam tak jak mówiłem sprity są inaczej narysowane w pliku. Nie wiem zrobić żeby normalnie wyświetlała się animacja poruszania, dlatego proszę o pomoc.
C/C++
int frame = 0( to mialem wyzej ale nie bylo potrzeby kopiowac wiekszej czesci kodu )
while( speed > 0 )
{
    if( key[ KEY_LEFT ] ) { GlownyBohater.x -= 2; }
    if( key[ KEY_RIGHT ] ) { GlownyBohater.x += 2; }
    if( key[ KEY_UP ] ) { GlownyBohater.y -= 2; }
    if( key[ KEY_DOWN ] ) { GlownyBohater.y += 2; }
    speed--;
    frame++;
    if( frame > 50 ) frame = 0;
   
}
if( frame < 20 ) { GlownyBohater.klatka = 0; }
else if( frame >= 20 && frame < 30 ) { GlownyBohater.klatka = 1; }
else if( frame >= 30 && frame < 40 ) { GlownyBohater.klatka = 2; }
else if( frame >= 40 && frame < 50 ) { GlownyBohater.klatka = 3; }

// if(key[KEY_LEFT])
// {
//if(frame < 20 ) {masked_blit(GlownyBohaterLeft, bufor, GlownyBohater.kierunek*60, GlownyBohater.klatka*60, GlownyBohater.x, GlownyBohater.y, 30, 30);}
// }
masked_blit( GlownyBohaterLeft, bufor, GlownyBohater.klatka * 60, 0, GlownyBohater.x, GlownyBohater.y, 30, GlownyBohaterLeft->h );
P-68079
DejaVu
» 2012-10-31 21:07:52
Uproszczony kod do pętli głównej aplikacji:
C/C++
nrKlatki =( nrKlatki + 1 ) % liczbaWszystkichKlatek;
RysujKlatke( nrKlatki, pozycja_x, pozycja_y );
P-68086
enzoMatrix
Temat założony przez niniejszego użytkownika
» 2012-10-31 21:10:59
rysuj klatke to rozumiem ze to np masked_blit ale tej pierwszej linijki za skarby nie rozumiem :P to ma być zamiast tych moich if z klatkami?
P-68089
Gabes
» 2012-10-31 21:16:17
Łatwiej jest wykonać animacje gdy masz kolejne klatki na jednej bitmapie.
Możesz pobrać postaci ze strony http://www.reinerstilesets.de/2d-grafiken/2d-humans/ i połączyć za pomocą programu GIMP. A tu mój program z prostą animcją. http://www.sendspace.pl/file/001021b0488661a318eb4af/allegro4-animacja-mapa-kafli
P-68091
enzoMatrix
Temat założony przez niniejszego użytkownika
» 2012-10-31 21:19:28
dzięki. to już się biorę za rozszyfrowywanie bo ten sprite z game makera mnie po prostu wykańcza. Swoją drogą wybrałem go bo game maker był nawet ciekawy i prosty niestety trzeba było chyba 100$ zapłacić żeby korzystać z niego w pełnej wersji. Jednak był dosyć ciekawy.
P-68092
DejaVu
» 2012-10-31 21:19:33
No to napisz sobie taką funkcję, a następnie napisz tą 'magiczną linijkę' i sprawdź czy zadziała. Następnie przeanalizuj co ona robi i wszystko stanie się jasne :)
P-68093
enzoMatrix
Temat założony przez niniejszego użytkownika
» 2012-10-31 21:26:53
Rzeczywiście działa:) w sumie nie wiem do czego było to GlownyBohater.klatka*60 widać tylko jedną postać co jest super. Ale rzeczywiście kiepsko go pokazuje tak "kwadratowo"
P-68094
« 1 »
  Strona 1 z 1