Северный (Арктический) федеральный университет им. М.В. Ломоносова
Опубликован: 10.04.2014 | Доступ: свободный | Студентов: 6837 / 1234 | Длительность: 14:18:00
Специальности: Программист
Лекция 7:

Работа с базами данных, графикой и анимацией. Разработка игр

16.4 2D и 3D графика

При разработке приложения важно четко понимать требования к графике в этом приложении. Для разных графических задач необходимы разные техники их решения. Далее в лекции рассмотрим несколько способов изображения графических объектов в Android.

Холсты и графические объекты. Платформа Android предоставляет API для изображения 2D графики, который позволяет изображать на холсте свои графические объекты или изменять существующие. Для отображения 2D графики существуют два пути:

  1. Изобразить графику или анимацию в элементе пользовательского интерфейса. В этом случае графика управляется процессом отображения иерархии элементов интерфейса. Подходит, когда необходимо отобразить простую графику, не требующую динамических изменений.
  2. Изображать графику напрямую на холсте (класс Canvas). В этом случае необходимо позаботиться о вызове метода onDraw(), передавая его в класс Canvas, или же о вызове одного из draw...() методов класса Canvas (например, drawPicture()). Действуя таким образом, можно управлять анимацией. Этот путь подходит, когда необходимо постоянно перерисовывать окно приложения, например, для видео игр.

Аппаратное ускорение. Начиная с Android 3.0 (API уровень 11), конвейер изображения 2D графики в Android поддерживает аппаратное ускорение. Это означает, что все операции рисования на холсте исполняются с использованием GPU. В связи с увеличением требований к ресурсам приложение будет потреблять больше RAM. Аппаратное ускорение доступно по умолчанию, если целевой уровень API больше или равен 14, но может быть включено явно. Если в приложении используются только стандартные представления и графика, включение аппаратного ускорения не должно привести к каким-либо нежелательным графическим эффектам. Однако из-за того, что аппаратное ускорение поддерживается не всеми операциями 2D графики, его включение может нарушать некоторые пользовательские изображения или вызовы рисования. Проблемы обычно проявляются в невидимости некоторых элементов, появлении исключений или неверно изображенных пикселях. Чтобы исправить это, Android позволяет включать или выключать аппаратное ускорение на разных уровнях: уровень приложения, уровень активности, уровень окна, уровень элемента интерфейса.

OpenGL. Android поддерживает высокопроизводительную 2D и 3D графику с использованием открытой графической библиотеки OpenGL, точнее OpenGL ES API. Библиотека OpenGL является кросс-платформенным API, который определяет стандартный программный интерфейс для аппаратного обеспечения, занимающегося обработкой 3D графики. OpenGL ES является разновидностью OpenGL, предназначенной для встроенных устройств. Android поддерживает несколько версий OpenGL ES API:

  • OpenGL ES 1.0 и 1.1 поддерживается Android 1.0 и выше;
  • OpenGL ES 2.0 поддерживается Android 2.2 (API уровень 8) и выше;
  • OpenGL ES 3.0 поддерживается Android 4.3 (API уровень 18) и выше.

Поддержка OpenGL ES 3.0 на реальном устройстве требует реализации графического конвейера, предоставленной производителем. Поэтому устройство с Android 4.3 и выше может не поддерживать OpenGL ES 3.0.

Подробнее с графикой в Android можно познакомиться по ссылкам:

16.5 Основные принципы разработки игровых приложений для смартфонов

Разработка игр дело обычно благодарное т. к. в игры люди играли, играют и будут играть. Даже если результат работы не принесет особой прибыли, в любом случае он способен доставить радость детям и друзьям, да и о себе забывать не стоит. При этом сам процесс разработки способен серьезно повысить уровень мастерства особенно начинающего разработчика.

Если возникло острое желание создать именно игровое приложение, необходимо иметь в виду некоторые особенности: практически любая игра предполагает наличие сюжета, игры обычно отличаются эффектным графическим оформлением и обеспечивают определенный игровой процесс (геймплей). И эти моменты стоит хорошо продумать прежде, чем начинать программирование.

Сюжет игры состоит из последовательности событий. Необходимость сюжета больше всего зависит от жанра игры: в некоторых жанрах можно обойтись совсем без сюжета. Не стоит, как недооценивать, так и переоценивать важность сюжета, т. к. он является лишь одной из составляющих успеха игры. Решение о том нужен или ненужен сюжет в игре, если нужен, то в какой мере и каким образом он будет выстраиваться, необходимо принимать взвешенно и до начала разработки.

При выборе способа графического оформления игры стоит иметь в виду, что использование 3D графики серьезно усложнит процесс разработки, даже несложная 3D игра отнимет очень много времени. В большинстве игр для мобильных устройств достаточно 2D графики, особенно в случае начинающего разработчика или команды таковых.

Следует учитывать ограниченные возможности мобильных устройств: сравнительно невысокая вычислительная мощность; ограниченный объем оперативной и дисковой памяти; небольшой размер и невысокое разрешение экрана; возможные проблемы, связанные с организацией передачи данных; ограниченный заряд аккумуляторных батарей.

Процесс разработки простого игрового приложения для смартфонов рассмотрен во второй части лабораторной работы к данной теме.

Марат Нуриджанян
Марат Нуриджанян

Пример: Скачать среду можно с сайта для разработчиков Android (http://developer.android.com/sdk/index.html).

Там скачать можно только Android Studio

Владимир Каункин
Владимир Каункин

В самостоятельной работе 2 в примере решения задания некорректно загадывается число (в двух местах), выбирая случайное целое число из диапазона [0, 99] вместо [1, 100], как того требует условие. Кроме того, загадывание числа всё таки лучше вынести в отдельный метод, как мне кажется.