Savail Temat założony przez niniejszego użytkownika |
Animacja sprite w grze [Allegro] » 2010-08-23 17:00:51 Witam Mam zamiar napisac gre 2d, cos w podobie Little Fighter, moze ktos gral ^^. Narazie sprity i grafika sa zapozyczone ale tylko do przykladu. Otoz nie jestem pewien czy robie ta animacje prawidlowo. Narazie mozemy poruszac sie tylko strzalka w prawo. Oto kod: #include <iostream> #include <allegro.h>
int main() { int x = 10, y = 220; int znak; allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT, 800, 300, 0, 0 ); BITMAP * ludek_prawo = NULL; BITMAP * ludek_prawo2 = NULL; BITMAP * ludek_prawo3 = NULL; BITMAP * ludek_prawo4 = NULL; BITMAP * ludek_lewo = NULL; BITMAP * ludek_gora = NULL; BITMAP * ludek_dol = NULL; BITMAP * postac = NULL; BITMAP * mapa = NULL; ludek_prawo = load_bmp( "ludek_prawo.bmp", default_palette ); ludek_prawo2 = load_bmp( "ludek_prawo2.bmp", default_palette ); ludek_prawo3 = load_bmp( "ludek_prawo3.bmp", default_palette ); ludek_prawo4 = load_bmp( "ludek_prawo4.bmp", default_palette ); ludek_lewo = load_bmp( "ludek_lewo.bmp", default_palette ); ludek_gora = load_bmp( "ludek_gora.bmp", default_palette ); ludek_dol = load_bmp( "ludek_dol.bmp", default_palette ); mapa = load_bmp( "mapa.bmp", default_palette ); blit( mapa, screen, 0, 0, 0, 0, mapa->w, mapa->h ); while( !key[ KEY_ESC ] ) { znak = readkey(); while( key[ KEY_RIGHT ] ) { postac = ludek_prawo; mapa = load_bmp( "mapa.bmp", default_palette ); masked_blit( postac, mapa, 0, 0, x, y, postac->w, postac->h ); blit( mapa, screen, 0, 0, 0, 0, mapa->w, mapa->h ); rest( 50 ); postac = ludek_prawo2; mapa = load_bmp( "mapa.bmp", default_palette ); masked_blit( postac, mapa, 0, 0, x, y, postac->w, postac->h ); blit( mapa, screen, 0, 0, 0, 0, mapa->w, mapa->h ); x += 2; x += 6; rest( 50 ); postac = ludek_prawo3; mapa = load_bmp( "mapa.bmp", default_palette ); masked_blit( postac, mapa, 0, 0, x, y, postac->w, postac->h ); blit( mapa, screen, 0, 0, 0, 0, mapa->w, mapa->h ); x += 6; rest( 50 ); postac = ludek_prawo4; mapa = load_bmp( "mapa.bmp", default_palette ); masked_blit( postac, mapa, 0, 0, x, y, postac->w, postac->h ); blit( mapa, screen, 0, 0, 0, 0, mapa->w, mapa->h ); x += 6; } } readkey(); destroy_bitmap( ludek_prawo ); destroy_bitmap( ludek_prawo2 ); destroy_bitmap( ludek_prawo3 ); destroy_bitmap( ludek_prawo4 ); destroy_bitmap( ludek_lewo ); destroy_bitmap( ludek_gora ); destroy_bitmap( ludek_dol ); destroy_bitmap( postac ); destroy_bitmap( mapa ); allegro_exit(); } END_OF_MAIN();
Dalbym paczke razem z gra i kodem ale sam nie moge odpalic gry z folderu.Wyskakuje blad ze nie mozna znalesc pliku alld42.ddl. Odpala sie tylko wtedy gdy uruchomie ja w codeblocks... |
|
waxx |
» 2010-08-23 17:11:47 Super a z czym problem? Wgl to robisz wszystko zle nie zapetlaj petli w petli. Zrob sobie timer i po prostu w kazdej klatce sprawdzaj czy np nie przekroczyl zalozmy 300ms (nie wiem jak to tam z timerami w allegro) i wtedy zmieniaj wskaznik na bitmape aktualnej klatki animacji. Lepiej jednak miec kazda klatke w jednym pliku i do blita brac tylko pewien obszar obrazka.
|
|
Shell32 |
» 2010-08-23 18:09:35 najlepiej to nie bierz sie za pisanie gry jezeli niewiesz dlaczego gra sie nie odpala w innym folderu ;/ jezeli tam nie ma dllki to jest oczywiste...
wogole ze animacje robisz zoabcz kurs Easykodera... tam masz pieknie wytlumaczone.. ale najpierw pocwicz podstawy c++ ;/
Pozdro |
|
Savail Temat założony przez niniejszego użytkownika |
» 2010-08-23 21:34:58 dllki wogole w folderze z gra nie widze, albo jestem slepy albo tego nie ma... podstawy c++ znam... Szczerze to sie troche pospieszylem z pisaniem gry 2d, bo nie doszedlem jeszcze w kursie do timerów ;p. Dzieki za przekierowanie mnie w kazdym razie edit: waxx chodzi o zrobienie jednej duzej bitmapy na ktorej beda sprity, tak? Zrobilbym to ale nie wiem jak, nie wiem tez co wpisac w google, ogolnie nie moge tego znalesc... |
|
ison |
» 2010-08-23 22:17:04 Zrobilbym to ale nie wiem jak, nie wiem tez co wpisac w google, ogolnie nie moge tego znalesc...
sam kombinuj przecież funkcja blit i masked_blit oferuje ci 'cięcie' bitmapy w dowolnym momencie |
|
Savail Temat założony przez niniejszego użytkownika |
» 2010-08-23 22:55:57 no tak racja, nie pomyslalem o tym. Dzieki Ison |
|
Savail Temat założony przez niniejszego użytkownika |
» 2010-08-24 23:13:12 hmm a jak z bitmapy na ktorej znajduje sie wiele sprite'ow obrocic tylko kawalek tej bitmapy?(czyli 1 sprite). Znalazlem funkcje rotate_sprite ale to sie nadaje tylko do pojedynczego sprita i jesli sie nie myle to strasznie ostrosc ucieka po wykorzystaniu tego. Potrzebny mi tylko obrot o 180 stopni. Jestem ciekawy czy w allgero da rade zrobic gre jak Tutajczy moze wybrac jakas inna biblioteke graficzna? |
|
ison |
» 2010-08-24 23:38:13 czy moze wybrac jakas inna biblioteke graficzna?
allegro jest najprostsza a sądząc po twoim kodzie każda inna będzie raczej za trudna. Najpierw opanuj allegro ;) wracając do problemu możesz na inną bitmapę przekopiować tylko część bitmapy ze sprite'ami która cię interesuje i ją obracać. |
|
« 1 » |