Jaki jest najlepszy sposób tworzenia animacji podczas programowania Androida?

10

Próbuję stworzyć swoją pierwszą grę na Androida i obecnie próbuję dowiedzieć się (z kimś, kto wykona rysunki i innym programistą), jaki jest najlepszy sposób tworzenia animacji. (Animacje takie jak poruszająca się postać itp.)

Na początku projektantka powiedziała, że ​​może rysować obiekty / postacie i animować je za pomocą lampy błyskowej, aby nie musiała rysować każdej klatki akcji. Drugi programista i ja nie znamy zbytnio Flasha, więc zasugerowałem wyodrębnienie wszystkich obrazów z animacji Flash i sprawienie, by pojawiały się jeden po drugim, gdy animacja ma się rozpocząć.

Powiedział, że skończyłoby się to zbyt dużym obciążeniem procesora, a ja raczej się z tym zgadzam, ale tak naprawdę nie rozumiem, w jaki sposób powinniśmy tworzyć płynne animacje bez nadmiernego obciążenia sprzętu i, jeśli to możliwe, nie mieć projektant rysuje każdą klatkę w programie Adobe Illustrator.

Czy doświadczony twórca gier na Androida pomoże mi to zrównoważyć, abyśmy mogli przejść do innych części gry, ponieważ nie mam pojęcia, jaki jest najlepszy sposób tworzenia animacji.

Adam Smith
źródło

Odpowiedzi:

12

Jeśli zastanawiasz się nad animacją 2D, renderowanie jednego duszka, a następnie drugiego, nie będzie stanowić problemu dla urządzenia (chyba że twoje duszki są ogromne).

Poniżej znajduje się typowa animacja, która jest pierwszą, którą znalazłem przy odrobinie poszukiwań. Jest to powszechnie stosowana technika i istnieje wiele stron internetowych, które oferują bezpłatne (i w przeciwnym razie zawsze sprawdzaj licencję) arkusze sprite.

Źródło obrazu: [tutaj] (http://gaminggroundzero.com/?page_id=31)

Obraz + źródło autora: tutaj

Zielony jest ustawiony jako przezroczysty kolor obrazu, dzięki czemu nie ma żadnych niepożądanych obszarów koloru. Będziesz musiał znać współrzędne każdej animacji w sekwencji animacji w arkuszu sprite, aby je odtworzyć.

W przypadku Androida możemy przyjrzeć się silnikowi gry typu open source autorstwa Chrisa Pruetta (wcześniej Google) o nazwie Replica Island . Kod źródłowy jest dostępny i możemy spojrzeć na jego SpriteAnimation.java i SpriteComponent.java .

A SpriteAnimationjest po prostu tworzony z liczbą klatek i unikalnym identyfikatorem, a każdy aktor w grze może mieć wiele animacji. SpriteAnimationMożna podać szereg AnimationFrameS, każda o czasie trwania w milisekundach. Oznacza to, że różne animacje można zamieniać w zależności od tego, czy postać się poruszy, zaatakuje itp. (Patrz w AnimationComponent.playAnimation(int id)).

Każda iteracja pętli grze AnimationFrame„s getFrame(float time)nazywa, i sprawdza, ile czasu minęło od ostatniej iteracji pętli głównej i decyduje, które rama grać dalej, a następnie zwraca ramkę, aby wysłany do systemu renderowania. Pozwala to na pomijanie klatek animacji, jeśli animacja przebiega zbyt wolno.

Mam nadzieję, że ten przykład zadziała i można go zobaczyć w rzeczywistej grze w Android Marketplace tutaj .

Martin Foot
źródło
Wielkie dzięki za dobrze wyjaśnioną i szczegółową odpowiedź! Zobaczę, jak mogę to dostosować do mojej gry. To jest bardzo pomocne!
Adam Smith
@AdamSmith: Korzystanie z takich arkuszy sprite jest najlepszym sposobem na animacje 2D. Nie ma znaczenia, czy twój artysta tworzy animacje we flashu, czy w innym programie, o ile może eksportować animację do obrazów, które można następnie spakować do arkusza sprite
bummzack
@bummzack To taka odpowiedź, na którą liczyłem, dzięki!
Adam Smith
@AdamSmith należy również zauważyć (aby uniknąć nieporozumień), że wyspa repliki tak naprawdę nie korzysta z arkuszy sprite, używa pojedynczych plików. Omówienie, dlaczego arkusze sprite są przydatne, można znaleźć tutaj i (bardziej szczegółowo) tutaj .
Martin Foot
@Martin Foot, podałeś bardzo miłe wyjaśnienie. Ale nadal mam zamieszanie, mam 10-15 rodzajów animacji i mam ramki każdej z nich o rozmiarze 320 x 480, które można powiedzieć o animacji pełnoekranowej. Więc co mi sugerujesz, że powinienem dostać plik źródłowy animacji SpriteSheet lub Single? Jestem zbyt zagubiony w tym, czego używać. Proszę zasugerować mi najlepszy sposób .. Wielkie dzięki ....
Scorpion