Kartofelek Opublikowano 16 Grudnia 2008 Udostępnij Opublikowano 16 Grudnia 2008 W jednym z poprzednich tematów (https://forum.gmclan.org/index.php?showtopic=15394) miałem problem ze zbyt dużym obciążeniem pamięci i zbyt długim wczytywaniem gry. Zrobiłem więc tak, jak polecał gostek na jednej ze stron (http://glog.yoyogames.com/?p=385) - pozamienialem "duze" sprity na puste-male i w zdarzeniu room create zamieniam je na wczytane z zewnatrz. Wszystko bardzo ladnie dziala. Wczytuje sie szybko itp. Pojawil sie jednak inny problem. Wczytac pojedynczy obrazek to nie sztuka, ale jak wczytac animacje zapisana klatka po klatce? Czyli jak stripowac wczytany plik? W helpie napisali, że takie cuda to tylko z JPG itp - dla gifow nie dziala. I faktycznie sprawdzilem - zrobilem obrazek JPG, w ktorym klatki sa ustawione kolejno obok siebie. Tylko ze takie wczytywanie jest "na czuja" (czyzby width/liczba klatek?) i dla GIFOW nie dziala. Pytanie wiec jak stripowac wczytany GIF, w ktorym klatki animacji nie koniecznie sa obok siebie - bo mam grafiki w ktorym klatki sa ulozone po 4-5 w rzedzie, a takich rzedow jest kilka: [(',')] [('.')] [(-,-)] [(',')] [('.')] [(-,-)] [(',')] [('.')] [(-,-)] Mogę pójść na łatwiznę i po prostu przerobić wszystkie takie grafiki na animowane gify, ale wolałbym zastosować inne rozwiązanie, bo przy takich "szachownicowych" grafikach łatwiej mi się je edytuje gdy widze na raz wszystkie klatki. Zreszta niektore sprity maja w sobie kilka typow przedmiotow, wiec animowane gify z poszczegolnymi klatkami wygladaja hmm bardzo smiesznie ^^ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 16 Grudnia 2008 Udostępnij Opublikowano 16 Grudnia 2008 Sprity są poukładane pionowo, tak? GML /* sprite_create_from_script( file - plik, x - pozycja X pierwszej klatki, y - pozycja Y pierwszej klatki, width - szerokość sprita, height - wysokość sprita, count - ilość klatek, precide - dokładne wykrywanie kolizji, transparent - przezroczystość, smooth - wygładzanie, preload - preload, xorig - x punktu odniesienia, yorig - y punktu odniesienia ) */ var _x, _y, _width, _height, _count, _file, _precide, _transparent, _smooth, _preload, _xorig, _yorig, _sprite, _surface, _i; _file = argument[0]; _x = argument[1]; _y = argument[2]; _width = argument[3]; _height = argument[4]; _count = argument[5]; _precide = argument[6]; _transparent = argument[7]; _smooth = argument[8]; _preload = argument[9]; _xorig = argument[10]; _yorig = argument[11]; _sprite = sprite_add( _file, 0, false, false, false, false, 0, 0 ); _surface = surface_create( _width, _height * _count ); surface_set_target( _surface ); draw_sprite( _sprite, 0, -_x, -_y ); surface_reset_target(); sprite_delete( _sprite ); _sprite = sprite_create_from_surface( _surface, 0, 0, _width, _height, _precide, _transparent, _smooth, _preload, _xorig, _yorig ); for( _i = 1; _i < _count; _i += 1 ) sprite_add_from_surface( _sprite, _surface, 0, _height * _i, _width, _height ); surface_free( _surface ); return _sprite; Dodaj to jako script. Argumenty jakie przyjmuje masz wypisane w komentarzu powyżej. =) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kartofelek Opublikowano 16 Grudnia 2008 Autor Udostępnij Opublikowano 16 Grudnia 2008 Ciekawy skrypt, chociaz cos mi sie wydaje ze on nie rozwiazuje problemu: 1) klatki byly obok siebie i takie rzeczy jeden pod drugim wiec chyba powinny byc 2 petle a nie jedna (for( _i = 1; _i < _count; _i += 1 )) 2) No i ta metoda sprite_create_from_surface - ona chyba tworzy nowego sprita a nie dodaje image do danego sprita? Moge sie mylic. Poradziłem sobie w ten sposób: Wczytywałem gifa jako sprita do GM. Potem wybierałem opcję - [save as Strip]. Po przekonwertowaniu wiekszosci na GIF stracilem 2Mb miejsca, co uznalem za nie najgorszy wynik. Jak dodam nowe rzeczy do gry i okaze sie ze bedzie jednak lipa, to najwyzej przerobie te bmp na jpg i powinno byc "po ptokach" ^^ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 16 Grudnia 2008 Udostępnij Opublikowano 16 Grudnia 2008 Zrozumialem ze pionowo sa poukladane kolejne klatki spritow, a poziomo kolejne sprity. I tak, tworzy nowego sprita, ale o to chodzi. Pozniej sa dodawanne kolejne klatki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 16 Grudnia 2008 Udostępnij Opublikowano 16 Grudnia 2008 Wyważanie otwartych drzwi... ^_^ Robisz dla każdej klatki osobny obrazek (lub. ew. jak chcesz to to do zip'a zapakuj ;P), i dodajesz następne klatki za pomocą bodajże sprite_add_from_file(). Nie wiem, co jest złego w tym, że będzie więcej plików. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 16 Grudnia 2008 Udostępnij Opublikowano 16 Grudnia 2008 Nie wiem, co jest złego w tym, że będzie więcej plików. Jeżeli chce ci się później to przeklepywać do skryptu, kiedy klatek jest więcej niż 20, to gratuluję. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pablo1517 Opublikowano 17 Grudnia 2008 Udostępnij Opublikowano 17 Grudnia 2008 Ja tam zawsze wszystkie sprity robiłem w GMie i exportowalem jako GMowe gify a następnie TO wczytywałem, 2 razy mniej kodu podczas wczytywania :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 17 Grudnia 2008 Udostępnij Opublikowano 17 Grudnia 2008 Tymon , a możesz jakoś podać ten skrypt na sprite_replace ? Bo ten co jest wyżej to jest chyba na wzór sprite_add ... :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pablo1517 Opublikowano 17 Grudnia 2008 Udostępnij Opublikowano 17 Grudnia 2008 lol xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 17 Grudnia 2008 Udostępnij Opublikowano 17 Grudnia 2008 Jeżeli chce ci się później to przeklepywać do skryptu, kiedy klatek jest więcej niż 20, to gratuluję.To se robię funkcję automatycznie ładującą animację - jedyny argument to nazwa pliku. Skrypcik leci pętlą sprawdzając, czy istnieją po kolei pliki: "nazwa_0.png", "nazwa_1.png", "nazwa_2.png"... No nie...? :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 17 Grudnia 2008 Udostępnij Opublikowano 17 Grudnia 2008 To se robię funkcję automatycznie ładującą animację - jedyny argument to nazwa pliku. Skrypcik leci pętlą sprawdzając, czy istnieją po kolei pliki: "nazwa_0.png", "nazwa_1.png", "nazwa_2.png"... No nie...? Można też ładować te sprity do tabeli "global.sprit[∞]", ale potem trudniej się tego używa (choć może dla niektórych łatwiej) i jest to mało przejrzyste. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kartofelek Opublikowano 21 Grudnia 2008 Autor Udostępnij Opublikowano 21 Grudnia 2008 A mi sie podoba ten powyzszy skrypt. Powiedzmy ze masz 200 spritów i kazdy po 10 klatek animacji - toz to 2000 plików ^^ Kto to potem bedzie rozpakowywal (ja tyle plikow to widzialem osobiscie tylko w HL) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się