Який найкращий спосіб створити анімацію при розробці Android?


10

Я намагаюся створити свою першу гру для Android, і зараз я намагаюся зрозуміти (з ким-небудь, хто буде робити малюнки, та іншим програмістом), який найкращий спосіб створити анімацію. (Анімації, такі як переміщення персонажа тощо)

Спочатку дизайнер сказав, що вона може малювати предмети / персонажі та анімувати їх спалахом, щоб не довелося малювати кожен кадр дії. Інший програміст, і я не знаю Flash занадто багато, тому я запропонував витягнути всі зображення з анімації Flash і зробити так, щоб вони з'являлися один за одним, коли мусить почати анімацію.

Він сказав, що в кінцевому підсумку буде зайнято занадто багато ресурсів на процесорі, і я, як правило, погоджуюся, але я не розумію, як ми повинні робити плавні анімації, не заважаючи на апаратне забезпечення, і, якщо можливо, не мати дизайнер малює кожен кадр на Adobe Illustrator.

Чи може досвідчений розробник ігор для Android допомогти мені збалансувати це, щоб ми могли перейти до інших частин гри, оскільки я поняття не маю, що найкращий спосіб створити анімацію.

Відповіді:


12

Якщо ви розглядаєте 2D-анімацію, надання одного спрайту та іншого не буде проблемою для пристрою (якщо тільки ваші спрайти не є величезними).

Нижче наведено типовий спрайт-анімацію, який я знайшов першим за допомогою невеликого пошуку. Це поширена методика, і є безліч веб-сайтів, які пропонують безкоштовні (та йнакше завжди перевіряти ліцензію) спрайети.

Джерело зображень: [тут] (http://gaminggroundzero.com/?page_id=31)

Зображення + авторське джерело: тут

Зелений колір встановлюється як прозорий колір зображення, щоб у вас не було зайвих кольорів. Вам потрібно буде знати координати кожної анімації в послідовності анімації в спрайті, щоб відтворити їх.

Для Android ми можемо ознайомитись із ігровим двигуном із відкритим кодом від Chris Pruett (раніше Google) під назвою Replica Island . Вихідний код доступний, і ми можемо подивитися на його SpriteAnimation.java та SpriteComponent.java .

A SpriteAnimationпросто створений з кількістю кадрів і унікальним ідентифікатором, і кожен актор в грі може мати кілька анімацій. SpriteAnimationМоже бути дано ряд AnimationFrameс, кожен з тривалістю в мілісекундах. Це означає, що різні анімації можна замінювати та виключати залежно від того, рухається чи атакує персонаж тощо (див. В AnimationComponent.playAnimation(int id)).

Кожна ітерація циклу гри, виклику AnimationFrame's getFrame(float time), і перевіряє, скільки часу минуло з моменту останньої ітерації основного циклу, і вирішує, який кадр відтворити далі, а потім повертає кадр для відправлення в систему візуалізації. Це дозволяє йому пропускати кадри анімації, якщо анімація йде занадто повільно.

Я сподіваюся, що цей приклад працює, і ви можете побачити його використання в реальній грі на Android Marketplace тут .


Велике спасибі за добре пояснену та детальну відповідь! Я побачу, як я можу це адаптувати до своєї гри. Це дуже корисно!
Адам Сміт

@AdamSmith: Використання подібних спрайтів є найкращим способом для двовимірної анімації. Не має значення, чи твій художник створює анімацію у спалах або іншу програму, якщо він може експортувати анімацію до зображень, які потім можна запакувати в спрайт-аркуш
bummzack

@bummzack Ось така відповідь, на яку я сподівався, дякую!
Адам Сміт

@AdamSmith Слід також зазначити (щоб уникнути плутанини), що Replica Island насправді не використовує спрайтових аркушів, він використовує окремі файли. Обговорення того, чому спрайстери корисні, ви можете ознайомитись тут і (більш детально) тут .
Мартін Фут

@Martin Foot, ти дуже добре дав пояснення. Але у мене все ще плутанина, у мене є 10-15 типів анімації, і у мене є рамки кожного з них розміром 320x480, про які можна сказати, повноекранна анімація. Отже, що ви мені підказуєте, що мені слід отримати для SpriteSheet або Single source file? Я занадто плутаю в тому, що використовувати. Будь ласка, запропонуйте мені найкращий спосіб .. Дякую багато ....
Скорпіон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.