Какой лучший способ создания анимации при разработке под 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: Использование таких спрайт-листов - лучший способ для 2D-анимации. Неважно, будет ли ваш художник создавать анимацию во флэш-памяти или другой программе, если он может экспортировать анимацию в изображения, которые затем можно упаковать в спрайт-лист
bummzack
@bummzack Это тот ответ, на который я надеялся, спасибо!
Адам Смит
@AdamSmith также следует отметить (чтобы избежать путаницы), что Остров Реплики на самом деле не использует спрайт-листы, он использует отдельные файлы. Обсуждение того, почему спрайт-листы полезны, можно найти здесь и (более подробно) здесь .
Мартин Фут
@ Мартин Фут, Вы дали очень хорошее объяснение. Но я все еще в замешательстве, у меня есть 10-15 типов анимации, и у меня есть кадры каждого из них размером 320x480, которые вы можете сказать, полноэкранная анимация. Так что вы предлагаете мне, что я должен получить для SpriteSheet или одного исходного файла анимации? Я слишком запутался в том, что использовать. Пожалуйста, предложите мне лучший способ .. Большое спасибо ....
Scorpion