2014-09-29 2 views
0

Я хочу сделать «2d игру», используя графику из ресурсов для персонажей. Теперь я спрашиваю себя, что является лучшим решением.Android SurfaceView и анимированная графика

Я много искал в сети, находя два разных варианта.

  • A) Создание пользовательского вида, добавив его в макет, показывающий AnimationDrawable или
  • B) с помощью SurfaceView непосредственно живописи на нем

Принимая во внимание, а) обычно называют медленным и unperformant для игры Я попытался найти решение для b). Но пока все уроки сделаны только с одним изображением, перемещающимся по поверхности или визуализирующим геометрические фигуры (что не совсем то, что я имел в виду). Найти учебники для «как рисовать AnimationDrawable на SurfaceView» очень редки.

Так что я думал, что могу загрузить все анимационные кадры моего персонажа в массив, каждый из которых вызывает правый объект SurfaceView. Но это звучит для меня много накладных расходов. Должен ли я отказаться от SurfaceView?

У кого-нибудь хорошая идея, какой был бы лучший способ для анимации - скажем, 10 символов + «фон» на моем экране?

+0

Есть готовые к использованию libs/фреймворки для Android с использованием GL и т. Д. Если вы хотите пойти с SurfaceView, реализуйте свои собственные классы Sprite и т. Д., Используя для этого компоненты Android, которые будут холодными. – eduyayo

+0

Ну, я не хотел использовать openGL, потому что это «только» 2D-игра.Больше похоже на типичную игру для прыжка и запуска. Фактически, все, что мне нужно, это что-то вроде способа рисования AnimationDrawable на SurfaceView, но, похоже, оно не поддерживается. –

+0

Использование GL не подразумевает, что будет 3D gfx, а рендеринг GL будет waaaaay быстрее. AnimationDrawable может быть круто для кнопки с sfx, анимация такой вещи, движущейся на экране, будет беспорядочной. – eduyayo

ответ

1

У вас есть (по крайней мере) три варианта:

  1. Розыгрыш на поверхности SurfaceView с Canvas. Это будет использовать программный рендеринг и быть относительно медленным.
  2. Вместо SurfaceView нарисуйте пользовательский вид с холстом. Это будет аппаратное ускорение, с some limitations.
  3. Нарисуйте поверхность SurfaceView с помощью OpenGL ES. Это будет аппаратное ускорение, но вы должны выяснить, как работает GLES.

Вы также должны рассмотреть (4) использование движка 2D с открытым исходным кодом и не беспокоиться о том, что он на самом деле делает.

Если вы хотите получить пример, Android Breakout - простая, но полная 2D-игра, написанная для GLES и GLSurfaceView. Более развитый набор помощников EGL/GLES можно найти в Grafika, который использует GLSurfaceView, SurfaceView и TextureView для достижения различных целей. Он также демонстрирует использование аппаратного масштабирования для повышения эффективности на больших дисплеях.

Длинное описание графической архитектуры Android доступно here.

+0

Эй, спасибо. Итак, вы говорите, что рисование на SurfaceView происходит медленнее, чем использование анимации, создающей отдельные виды? Я думал, что все будет наоборот. Я где-то читал, что использование Views имеет много накладных расходов! –

+0

http://developer.android.com/guide/topics/graphics/hardware-accel.html утверждает, что холст (с поверхности, на который я рисую) также является аппаратным. Или не так ли? –

+0

A SurfaceView имеет две части: «поверхность» и «вид». Часть «Вид» - это просто прозрачный держатель места, используемый для компоновки с другими видами; Поверхность - это совершенно отдельный слой, который находится за слоем с представлениями в нем. Рендеринг выполняется для поверхности. Вы * можете * визуализировать View часть SurfaceView, но это было бы бессмысленно (и пустая трата системных ресурсов). В любом случае, рендеринг холста в представлении ускоряется, рендеринг холста на поверхность - это не так. – fadden

0

Хорошо, я не уверен, что это лучший вариант, но я нашел учебник для использования «Sprite Sheets».

http://www.edu4java.com/en/androidgame/androidgame4.html

До сих пор это кажется хорошим решением. OpenGL казался для меня слишком много, но, возможно, я плохо разбираюсь в Shader Language и т. Д. Итак, если кто-нибудь найдет лучшее решение, сообщите мне.

+0

Это выглядит действительно хорошо! Кстати, вам не нужны такие знания о 3D-программировании, когда вы используете http://www.andengine.org/ или такие. – eduyayo