Как создать игру мобильный телефон. Какую платформу выбрать для создания мобильной игры

Этот урок начинает серию статей, посвященных написанию аркадных игр для Android. За основу был взят цикл, который написал и опубликовалв своем блоге Tamas Jano . Материал ориентирован, прежде всего, на начинающих программистов, которые хотят попробовать свои силы в создании игр для Android. Я ставлю перед собой цель создать у нас на сайте максимально понятный и доступный учебник для молодой русскоязычной аудитории, поэтому очень надеюсь на вашу критику, вопросы и комментарии. Опубликованный в этом цикле материал будет постоянно перерабатываться с учетом ваших вопросов, пожеланий и замечаний. Надеюсь, что вместе мы сможем успешно осуществить этот небольшой эксперимент.

Александр Ледков

Идея и архитектура

Прежде чем переходить непосредственно к программированию, давайте определимся с нашими задачами и опишем в общих чертах нашу будущую игру. Идея проста: главный герой борется с ордами роботов, которые хотят его уничтожить. У него есть три жизни и лазерное ружье. Роботы не умеют стрелять. Все что они могут - поймать нашего героя и оторвать ему голову... ну или что-нибудь еще. Управление персонажем осуществляется с помощью двух "сенсорных джойстиков" Вы наверняка встречали их в подобных играх. В левом нижнем углу будет размещен джойстик, отвечающий за перемещение героя. В правом нижнем углу - за оружие.

Смоделируем игровую ситуацию. Наш персонаж находится в центре экрана. Роботы каждую 1/10 секунды приближаются к нему. каждую десятую секунду мы проверяем также не произошло ли касание экрана. Если произошло - двигаем наш персонаж в необходимом направлении или делаем выстрел. если выстрел сделан, каждый тик (1/10 секунды) мы проверяем столкновение пули с врагами. Если пуля попала в робота - то и робот и пуля взрываются, если нет - роботы и пуля перемещаются на новые позиции (робот перемещается на 5 пикселей за тик, а пуля - на 50 пикселей). Мы также проверяем не поймал ли робот нашего героя. Если поймал - игра заканчивается.

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

  1. Модуль управления . Здесь считываются координаты касания экрана.
  2. Игровой движок . Здесь мы должны обновить состояние игровых объектов, то есть вычислить их новые координаты, проверить здоровье, столкновения и тому подобное.
  3. Аудио модуль .
  4. Графический модуль . Здесь на основании текущего состояния формируется и выводится на экран новый кадр.

Давайте более детально рассмотрим наши модули.

Модуль управления

В нашей игре сообщения генерируются при касании пользователем двух областей на экране. Программа отслеживает события onTouch и записывает координаты каждого касания. Если координаты находятся внутри управляющей области, мы посылаем соответствующую команду игровому движку. Например, если произошло касание сбоку круга, мы должны двигать нашего персонажа в соответствующую сторону. Если произошло касание круга, управляющего оружием, мы посылаем команду движку обработать событие выстрела.

Игровой движок

Модуль игровой логики отвечает за изменение состояний всех игровых персонажей, под которыми я понимаю каждый объект, имеющий состояние (Наш герой, роботы, лазерные выстрелы).

Давайте рассмотрим взаимодействие модуля управления и игрового движка. На представленном выше рисунке показан круг-контроллер. Светлое зеленое пятно символизирует область касания. Модуль управления сообщает игровому движку координаты касания (dx и dy - расстояния в пикселях от центра круга). На основании этих координат игровой движок вычисляет направление и скорость движения нашего героя. Например, если dx>0, наш персонаж движется вправо, eсли dy>0 - в верх.

Аудио модуль

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

Графический модуль

Этот модуль отвечает за вывод игровой ситуации на экран телефона. В Android существует несколько способов формирования изображения на экране. Можно рисовать прямо на canvas, полученный от View или использовать отдельный графический буффер и вы, а затем передавать его View, а можно воспользоваться возможностями библиотеки OpenGL. Полезно при разработке игры постоянно измерять FPS - число кадров в секунду, которые выдает ваш графический движок. Величина в 30 FPS означает, что за одну секунду наша программа успевает 30 раз обновить экран. Забегая вперед скажу, что для мобильного устройства 30 FPS более чем достойный показатель.

Создаем проект-заготовку для будущей Android игры

Я не буду здесь подробно расписывать процесс установки Android SDK и Eclipse, за рамками повествования я оставлю и элементарные действия по созданию Android проекта. В интернете валяется огромное количество уроков и статей, посвященных этой теме.

Создайте новый проект. В поле Project Name введитеDroidz . В качестве целевой платформы выберите Android 2.2 или выше. В Package Name - "ru.mobilab.gamesample ". Не забудьте поставить галочку около Create Activity. В качестве имени главной activity введитеDroidzActivity .

Откройте файл src/ru.mobilab.gamesample/DroidzActivity.java

import android.app.Activity;
import android.os.Bundle;

public class DroidzActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}

Метод onCreate вызывается при создании activity во время запуска приложения. Этот метод можно рассматривать, как точу входа в программу. Класс R.java автоматически генерируется Eclipse и содержит в себе ссылки на ресурсы. Каждый раз, когда вы изменяете ресурсы в Eclipse класс R пересобирается.

Главный игровой цикл

В любой игре должен присутствовать цикл, который будет фиксировать команды пользователя, обрабатывать их, изменять в соответствии состояния игровых объектов, выводить новый кадр на экран и проигрывать звуковое сопровождение. Мы уже создали простейший проект для Android. Давайте теперь создадим реализацию игрового цикла.

Как вы помните, в Android все происходит внутри Activity. Activity создает View - объект, где происходит все самое интересное. Именно через него мы можем получить информацию о касаниях экрана, здесь же можно вывести картинку на экран.

Давайте откроем файл DroidzActivity.java. В конструкторе класса вы увидите строчку

SetContentView(R.layout.main);

эта строка выбирает текущий объект View для Activity. Давайте создадим новый объект для View. Наиболее простым способом получения View - создать собственный класс на основании SurfaceView. В нашем классе мы реализуем интерфейс SurfaceHolder.Callback, чтобы ускорить доступ к изменениям поверхности, например когда она уничтожается при изменении ориентации устройства.

MainGamePanel.java

package ru.mobilab.gamesample;






SurfaceHolder.Callback {


super(context);
// Добавляем этот класс, как содержащий функцию обратного
// вызова для взаимодействия с событиями
// делаем GamePanel focusable, чтобы она могла обрабатывать сообщения
setFocusable(true);
}

@Override
}

@Override
}

@Override
}

@Override

}

@Override
}
}

В приведенном выше листинге показан шаблон класса, которые нам предстоит реализовать. Давайте более внимательно посмотрим на содержание конструктора. Строка

GetHolder().addCallback(this);

Устанавливает текущий класс (MainGamePanel) как обработчик событий от поверхности.

SetFocusable(true);

Эта строка делает наш класс фокусируемым. Это означает, что он может получать фокус, а значит и события.

Давайте создадим поток, внутри которого собственно и будет реализован наш игровой цикл. Разделение игры на несколько параллельно выполняющихся потоков - общепринятая в современном геймдеве практика. Создадим для нашего потока класс MainThread.java

Package ru.mobilab.gamesample;

public class MainThread extends Thread {

//флаг, указывающий на то, что игра запущена.

Private boolean running;
public void setRunning(boolean running) {
this.running = running;
}

@Override
public void run() {
while (running) {
// обновить состояние игровых объектов
// вывести графику на экран
}
}
}

Как видите, этот класс существенно проще предыдущего. Внутри мы переопределили метод run(). Поток выполняется до тех пор, пока выполняется этот метод, поэтому мы организовали внутри него бесконечный цикл. Мы добавили логическую переменную running, которая служит индикатором выхода из цикла. Теперь чтобы завершить поток, нужно просто где-то изменить значение этой переменной на false.

После того, как мы создали класс потока, его нужно запустить. Давайте запускать его при загрузке экрана. Изменим класс MainGamePanel

Package ru.mobilab.gamesample;

import android.content.Context;
import android.graphics.Canvas;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MainGamePanel extends SurfaceView implements
SurfaceHolder.Callback {

Private MainThread thread;

Public MainGamePanel(Context context) {
super(context);
getHolder().addCallback(this);

// создаем поток для игрового цикла
thread = new MainThread();

SetFocusable(true);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
thread.setRunning(true);
thread.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//посылаем потоку команду на закрытие и дожидаемся,
//пока поток не будет закрыт.
boolean retry = true;
while (retry) {
try {
thread.join();
retry = false;
} catch (InterruptedException e) {
// пытаемся снова остановить поток thread
}
}
}

@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}

@Override
protected void onDraw(Canvas canvas) {
}
}

Мы объявили объект thread

Private MainThread thread;

и создали его в конструкторе

Thread = new MainThread();

в методе surfaceCreated мы установили флаг running в значение true и запустили поток. К этому времени объект thread уже благополучно создан и можем без опасений запускать его.

Метод surfaceDestroyed вызывается перед закрытием поверхности. Здесь недостаточно просто снять флаг running. Мы должны убедиться, что поток действительно закрылся. Мы просто блокируем поток и ждем, пока он не умрет.

Добавляем взаимодействие с экраном

Чтобы показать, как в Android обработать касания, напишем небольшой пример. Будем выходить из программы, когда пользователь коснется нижней части экрана. Если касание произошло где-то выше - будем просто выводить в лог соответствующие координаты. Добавим в класс MainThread следующие строки:

Private SurfaceHolder surfaceHolder;
private MainGamePanel gamePanel;

public MainThread(SurfaceHolder surfaceHolder, MainGamePanel gamePanel) {
super();
this.surfaceHolder = surfaceHolder;
this.gamePanel = gamePanel;
}

тем самым мы определили переменные gamePanel и surfaceHolder, взяв соответствующие значения из параметров конструктора. Нам нужно запомнить эти значения, чтобы потом иметь возможность блокировать поверхность на время рисования, а это можно сделать только через surfaceHolder.

Измените строку в классе MainGamePanel, добабвив в конструктор вновь объявленные параметры

Thread = new MainThread(getHolder(), this);

Мы передаем текущий обработчик и панель в новый конструктор. Это позволит нам иметь к ней доступ из потока. В gamePanel мы создадим метод update и будем переключать его из потока, но пока оставим все как есть.

Логирование

Ниже мы напишем вспомогательный код, осуществляющий логирование - запись специальных отладочных строк с текстом, отражающих состояние нашей программы, в специальный файл, который потом можно просмотреть и попытаться понять, что происходило в программе. добавим константу TAG в класс MainThread. Каждый класс будет у нас иметь собственную константу с именем TAG, которая будет содержать название соответствующего класса. Бы будем использовать Android logging framework, чтобы вести логирование, в рамках этой библиотеки каждый лог должен иметь два параметра. Первый параметр определяет место, откуда записан лог. Именно для этих целей мы и создали константу TAG. Второй параметр - собственно сообщение, которое мы хотим записать в лог. Использование имен классов в качестве первого параметра - довольно распространенная в среде java программистов практика.

Чтобы посмотреть записанные в процессе выполнения программы логи нужно выбрать меню
Windows -> Show View -> Other…
а затем в открывшемся диалоге
Android -> LogCat
В открывшемся окне можно не только просматривать логи, но и осуществлять фильтрацию и поиск.

Вернемся к нашему коду. Внесем изменения в MainThread.java

Package ru. mobilab. gamesample; import android. util. Log ; import android. view. SurfaceHolder; public class MainThreadextends Thread{ private static final String TAG= MainThread. class . getSimpleName() ; private SurfaceHolder surfaceHolder; private MainGamePanel gamePanel; private boolean running; public void setRunning(boolean running) { this. running= running; } public MainThread(SurfaceHolder surfaceHolder, MainGamePanel gamePanel) { super() ; this. surfaceHolder= surfaceHolder; this. gamePanel= gamePanel; } @ Override public void run() { long tickCount= 0L; Log . d(TAG, "Starting game loop" ) ; while (running) { tickCount++; // здесь будет обновляться состояние игры // и формироваться кадр для вывода на экран } Log . d(TAG, "Game loop executed " + tickCount+ " times" ) ; } }

Как видите, мы определили TAG и вызвали внутри метода run команду Log, которая делает соответствующую запись в лог файле. Мы выводим в лог значение переменной tickCount, которая фактически является счетчиком игрового цикла и показывает сколько раз успел выполниться игровой цикл за время работы программы

Перейдем к файлу MainGamePanel.java и найдем метод onTouchEvent, который является обработчиком касаний экрана.

public boolean onTouchEvent(MotionEvent event) { if (event. getAction() == MotionEvent. ACTION_DOWN) { if (event. getY() > getHeight() - 50 ) { thread. setRunning(false ) ; ((Activity) getContext() ) . finish() ; } else { Log . d(TAG, "Coords: x=" + event. getX() + ",y=" + event. getY() ) ; } } return super. onTouchEvent(event) ; }

Сначала мы проверяем произошло ли событие касания экрана (MotionEvent.ACTION_DOWN). Если произошло, проверяем координату y и если она находится в нижней части экрана (50 пикселей снизу), мы посылаем потоку команду на завершение (установив переменную running в false), а затем вызываем метод finish() для главной Activity, который закрывает всю нашу программу.

Замечание. Начало системы координат у экрана находится в левом верхнем углу. Ось y направлена вниз, ось x - вправо. Ширину и высоту экрана можно получить с помощью методов getWidth() и getHeight() соответственно.

Изменим DroidzActivity.java, добавив команды записи в лог

Package ru. mobilab. gamesample; import android. app. Activity; import android. os. Bundle; import android. util. Log ; import android. view. Window; import android. view. WindowManager; public class DroidzActivityextends Activity{ /** Вызывается при создании activity. */ private static final String TAG= DroidzActivity. class . getSimpleName() ; @ Override public void onCreate(Bundle savedInstanceState) { super. onCreate(savedInstanceState) ; // запрос на отключение строки заголовка requestWindowFeature(Window. FEATURE_NO_TITLE) ; // перевод приложения в полноэкранный режим getWindow() . setFlags(WindowManager. LayoutParams. FLAG_FULLSCREEN, WindowManager. LayoutParams. FLAG_FULLSCREEN) ; // устанавливаем MainGamePanel как View setContentView(new MainGamePanel(this) ) ; Log . d(TAG, "View added" ) ; } @ Override protected void onDestroy() { Log . d(TAG, "Destroying..." ) ; super. onDestroy() ; } @ Override protected void onStop() { Log . d(TAG, "Stopping..." ) ; super. onStop() ; } }

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

Просмотрев лог вы получите четкое представление о порядке запуска методов. Вы также можете увидеть сколько раз за время работы программы успел выполниться игровой цикл. Эта цифра ни о чем не говорит, в следующий раз мы выведем в лог более полезную информацию: FPS и UPS (обновлений в секунду).

Подведем итог. Мы создали полноэкранное приложение. Написали класс, который выполняется в отдельном потоке и будет содержать игровой движок. Написали простейший метод обработки касаний экрана и грамотно закрыли приложение.

В следующий раз мы перейдем к рисованию. Исходный код этого урока можно скачать .

Перевод и адаптация:Александр Ледков

Статьи и Лайфхаки

Наверняка вопрос о том, как сделать игру на телефон , волнует многих пользователей мобильной сети (аналогично вопросу ). Телефонный аппарат давно уже перестал быть обычным способом связи, и стал неотъемлемой частью жизни каждого современного человека. Конечно, обычно над созданием игр трудятся квалифицированные специалисты известных компаний-разработчиков. Можно ли создать игру самостоятельно, и если да, то как?

Делаем игру на телефон: задумка и обучение

Итак, ответ на вопрос является утвердительным. Изначально будущему разработчику следует определиться с операционной системой мобильного телефона, на которую будет рассчитана его игра. На сегодняшний день не существует такой мобильной платформы, которой бы пользователи отдавали наибольшее предпочтение – как это происходит, к примеру, в мире персональных компьютеров, где «пальма первенства» принадлежит Windows. Каждый из производителей готов предложить нечто эксклюзивное, и в итоге рынок заполнен десятками операционных систем. Наиболее популярными можно назвать Windows Phone 7, Android, iOs и Symbian OS. Для начала придётся заняться разработкой игры для конкретной платформы, а уж потом можно попытаться подстроить приложение и под другие системы. Вопрос о том, как сделать игру на телефон, требует самого смелого и творческого подхода, поскольку иногда различие между ОС оказывается очень существенным.

Естественно, каждый вдумчивый творческий процесс (особенно если это касается программирования) требует предварительного обучения, которое порой может затянуться на недели, а то месяцы и годы. Очевидно, что уровень профессионализма специалиста прямо пропорционален успеху будущей игры. Поэтому начать придётся с обучения языку программирования. Стоит отметить, что идеальным вариантом станет язык Java. В большинстве случаев новички с трудом постигают его азы, поэтому начать им придётся с основ школьной программы курса информатики.

Важнейшим этапом является формирование идеи будущей игры, которая может, в принципе, и предшествовать обучению. Однако по мере освоения Java пользователю будет легче изложить свои намерения в специальном документе, продумать концепцию игры, одновременно обдумывая всё с точки зрения логики и вспоминая важнейшие знания и литературу по программированию.

Делаем игру на телефон: разработка и тестирование

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

И наконец, тестирование – самый длительный и напряжённый этап в разработке любой существующей игры. Во время тестирования пользователь ищет собственные ошибки и недочёты, исправляет баги и прочие неточности. Вначале их наверняка будет очень много, однако не стоит отчаиваться. Вместо этого количество ошибок стоит свести к минимуму.

Что касается непосредственно выпуска игры, тут уже личное дело каждого. Её можно сделать платной или бесплатной, а ещё лучше – найти спонсора, согласного отдать за игру неплохие деньги.

Разработка мобильных приложений является одним из самых прибыльных занятий в компьютерной индустрии. Создание игры на Android обходится в несколько сотен или тысяч долларов, а прибыль может достигать и миллиона долларов. В связи с этим множество людей интересуется разработкой приложений на телефон. В этой статье вы узнаете о том, как создать игру на андроид с нуля через компьютер, какой движок и конструктор лучше выбрать.

Ни одна успешная игра не обходится без красивой графики, поэтому создание дизайна – один из важнейших этапов разработки. Дизайн на ОС Android реализовывается с помощью «дизайн-документа» или диздока. Начать создание игрушки нужно именно с его детальной проработки. В файле содержится:

  1. Объектные модели;
  2. Функциональные спецификации;
  3. Игровой контент;
  4. Интерфейс.

Рассмотрим каждый из пунктов более подробно.

Объектные модели

Это информация о функционале каждого предмета. Объектные модели отвечают за возможность покупки и продажи предметов, а также за улучшение игровых характеристик персонажей.

Функциональные спецификации

Здесь описывается геймплей, основные возможности каждого персонажа. Также здесь дается описание особенностей игровых предметов – оружия, аптечек, брони и других. По сути, функциональные спецификации – это правила, по которым происходит игровой процесс. Чем лучше будет проработан данный раздел, тем легче будет создать качественную Андроид-игру.

Игровой контент

Это текстовая начинка игры. Здесь описываются диалоги персонажей и то, из какого оружия можно наносить урон, сколько здоровья будет отнимать попадание, какие характеристики будут увеличиваться при использовании различного снаряжения. Также здесь содержится подробное описание каждого предмета.

Интерфейс

Интерфейс – это то, как пользователь будет взаимодействовать с игрой. Он включает в себя кнопки, с помощью которых можно управлять персонажем, и разделы меню: например, играть, счет, настройки, топ игроков, справка. Если вы не имеете опыта в создании приложений на Андроид, перед созданием собственного скачайте с Плей Маркета и проанализируйте популярные игры и перенесите лучшие решения в свой проект.

Игровой движок

Основой любой игры является движок. Это программное обеспечение, позволяющее разрабатывать и запускать ее. Он содержит целый комплекс программ, включающий движок рендеринга, физический движок, звук, анимацию и многое другое. Чтобы облегчить процесс написания программ, сторонние разработчики создают собственные игровые движки специально для Андроид-приложений.

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

UDK

Torque 2d/3d

Что такое конструктор игр?

Конструктор – это программа, объединяющая в себе игровой движок и интегрированную среду разработки. Конструктор делает процесс разработки доступным для людей, которые не обладают навыками программирования. Некоторые из конструкторов позволяют создавать игры определенных жанров, другие обладают максимальным функционалом, но стоят значительно больших денег. Для начинающего создателя мобильных приложений, выбор конструктора – один из самых ответственных моментов, ведь именно от его возможностей будет зависеть судьба будущего приложения.

Конструктор позволяет создавать игры различных жанров для Windows, Android и iOS. Предлагает большой выбор готовых локаций, объектов, персонажей и звуковых оформлений, поэтому создание первой Андроид-игры не займет много времени. Пользователи, знакомые с языками программирования JS и C++, могут использовать встроенный GML. Единственный недостаток заключается в том, что программа не переведена на русский язык.

Заключение

Создание игры на Андроид – не совсем простое, но очень прибыльное дело. Если вы решили разработать игру и зарабатывать на ней, сначала проработайте идею. Далее напишите «дизайн-документ» и определитесь с игровым движком, который сможет максимально раскрыть ее потенциал. После этого можно приступать непосредственно к созданию приложения в конструкторе.

Видео

Чтобы детальнее ознакомиться с процессом создания Андроид-игр, ознакомьтесь с серией видеороликов, посвященных этому занятию.

Игровая индустрия за последние несколько лет сильно изменилась. Раньше по-настоящему большие проекты выходили раз-два в год, если не меньше, в наше время ситуация совсем другая. На официальном сайте Steam была опубликована новость, в которой приводилась подробная статистика: за этот год было выпущено 38% всех игр площадки (более 4200, из них около 80% - Indie.). Кто-то скажет, что из-за количества страдает качество, но на самом деле это не всегда оказывается правдой. В данной статье мы описали несколько программ для создания игр, с помощью которых вы сможете разрабатывать свои проекты на различные платформы: PC, IOS, Android, PS4, Xbox One.

Unity3D

Unity Technologies - уникальная компания. Она создала движок Unity3D - один из самых популярных инструментов для создания игр во всей игровой индустрии. Игровой движок Unity несомненно является доминирующим глобальным поставщиком программного обеспечения для разработки игр. Больше всего игр сделано именно на этом движке. Так, за 2015 год было создано 220 тысяч видео игр, а установки превысили 4,2 миллиарда раз. Все больше геймеров играют в игры, сделанные на Unity, и все больше разработчиков полагаются на их инструменты и сервисы для управления своим бизнесом. Мы уже писали о Unity 5 на нашем сайте, сравнивая его с другими игровыми движками: . Сейчас мы вкратце расскажем о нём.

Игровой движок Unity 5 предлагает широкий спектр функций и довольно простой для понятия интерфейс. Это кросс-платформенный движок, который с легкостью портирует игры на Android, IOS, Windows Phone 10, BlackBerry , делая его замечательным инструментом для создания мобильных игр. Он также имеет возможность создания видеоигр для консолей нового поколения: PS4 PRO, Xbox One S .

Unity поддерживает 3D форматы различных программ: 3ds Max, Maya, Blender, CINEMA 4D, Softimage и так далее. Новый Unity3D поддерживает гибкую настройку Спрайтов (Sprites) и 2D физики, что делает его отличным игровым движком для создания 2D и 2.5D игр. Именно поэтому многие компании, нацеленные на создание мобильных проектов, выбирают Unity, потому что быстрая разработка, минимальные вложения, портирование на все возможные платформы - это то, что по-настоящему нужно небольшим компаниям.

Помимо того, этот игровой движок работает в связке со многими 3D программами, он также содержит полезные функции для редактирования внутри движка. Unity не имеет реальных инструментов для моделирования, есть только возможность масштабировать и накладывать текстуры на 3D модели, поэтому все, что касается анимирования, моделирования, создания материалов, будет создаваться в постороннем 3D софте. Однако Unity3D может похвастаться большой библиотекой ассетов, где большая часть может быть скачана бесплатно, а остальная часть может быть приобретена за небольшую цену (цена определяется автором ассета).

Unity 5 имеет несколько тарифных планов. Если раньше их было все 2: бесплатная версия и платная за $75/месяц, то сейчас их куда больше. Personal версия - бесплатная сборка для тех, кто только знакомится с этим игровым движков. Доход в данном случае не должен повышать $100.000 долларов за квартал. Вам будут доступны все функции, вы сможете начать работать сразу, как только зарегистрируетесь и установите его.
Версия Plus - сборка, подходящая для продвинутых художников. Одной из главной особенности этой сборки является замена скина UI редактора, замена начального экрана и ряд других возможностей, недоступных для пользователей с бесплатной версией.
PRO версия - для мастеров своего дела. С Unity Pro у вас есть возможность посмотреть исходный код, получить премиум поддержку, ассеты можно купить на Asset Store со скидкой 40%, что очень неплохо.
И последняя версия - Enterprise . Данную сборку нельзя купить обычным способом, вам будет необходимо связываться с Unity Technologies для получения самой профессиональной сборки для 20+ сотрудников.

Unity часто ассоциируется с мобильными играми, но с выходом Unity 5 и новым рендером наблюдается огромный рост графических возможностей игрового движка, включая такие вещи, как Physically Based Shading, Global Illumination в реальном времени и HDR Reflection Probes , а также многие другие улучшения.

Unity 5 предлагает некоторые функции, которые делают его сильным соперником среди игровых движков Unreal Engine 4 и CryEngine 3. Скачать можно с официального сайта Unity.com .

Unreal Engine

Unreal Engine - игровой движок, разработанный компанией Epic Games . Она известна по ряду игр: FPS шутер "Unreal ", блокбастер "Gears of War ", "Infinity Blade " на IOS. С этим инструментом можно создать игры на Windows, Mac, Xbox One S, PS 4K, IOS, Linux, Android, Ouya, VR и для HTML5 Web браузеры.

Если Unity знают по Indie играм (Crossy Road, Superhot, I am Bread и так далее), то Unreal Engine, наоборот, выпускает огромные проекты, будь то Smite, Paragon, Day by Daylight ... Эта программа имеет полный набор инструментов для создания своей собственной игры, начиная с мобильной 2D, заканчивая консольным VR блокбастером. Он использует встроенный визуальный скриптинг - Blueprint, который сильно упрощает процесс создания игры.

В Unreal Engine 4 любому пользователю будет доступен исходный код, с которым можно настроить программу под себя, использовать необходимые плагины и написать свои. Присоединившись к Epic Games вы сможете посмотреть 3 миллиона строк кода, доступных на GitHub. Скачать с официального сайта: ссылка .

Kobold2D

Ready-To-Go решение для разработки игр на IPhone . Открытый код, ARC включен, для IOS и Mac OS. Kobold2D - это расширенная и улучшенная версия знаменитой программы для создания игр - Cocos2D для IPhone. Все, что вы знали о Cocos2D, может быть применено в новом движке. Новая версия более удобна в использовании, более мощный и гибкий вариант, чем Cocos2D, вся документация доступна в интернете и в автономном режиме. Используйте эту программу для создания игр под Iphone, Ipod Touch, Ipad и Mac Os X для Apple App Store.

Kobold2D использует популярный cocos2D-iphone игровой движок, добавляет часто используемый код, интегрирует популярные библиотеки и хочет, чтобы вы были более продуктивными и получали удовольствие от обучения и разрабатывания IOS и Mac OS X игр. Kobold2D предоставляет обширную документацию и множество примеров кода для быстрого старта.

ZGame Editor

Создавайте игры размером всего 64KB или меньше, используя процедурный контент. Программа использует OpenGL для графики и Real-Time синтезатор для аудио. ZGameEditor - это бесплатная Open Source программа. Для более подробного изучения посетите веб-сайт с документацией.

ZGameEditor - инструмент для создания несложных аркадных игр. Особенности: Встроенное окружение для разработки, где вы можете работать и тестировать свою игру, Cross-Platform: Редактор только для Windows, но также можно запускать на Linux, Mac OS X и Android, 3D ассеты и геймлпей компоненты, импортируйте свои текстуры, MIDI файлы для музыки и 3DS файлы для 3D ассетов. Игры, созданные на ZGE, можно распространять бесплатно (Royalty Free). Исходный код можно посмотреть здесь (Pascal): .

GameGuru

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

Игровой мир: большие игровые локации, Terrain Editor, встроенная система растительности, готовые примеры для старта, растительность генерируется в том месте, где вы считаете нужным.

Рендер: игровой движок поддерживает технологию Level of Detail (LOD), чтобы обеспечить плавную картинку и высокую частоту кадров. Каскадный мэппинг теней, динамические тени в реальном времени. Возможность запекания теней, добавления дополнительных реалистичных теней, поддержка Ambient Occlusion, Sky maps и Occlusion Culling System.

Геймплей: экшен FPS, быстрая, классическая FPS механика, Third Person Shooter механика, стратегия в реальном времени, Фэнтези-анимации, готовый мультиплеер (Просто создайте или присоединитесь к созданной игре в GameGuru, используя Steam Multiplayer и Steam Workshop. )

Персонажи в GameGuru: возможность создания реалистичного персонажа, его кастомизация, создание анимаций, AI, встроенный NavMesh, позволяющий игрокам двигаться по карте, не проходя сквозь игровые объекты. Также для каждого игрового персонажа можно подобрать собственное оружие, полностью анимированное и готовое к использованию.

GameMaker: Studio

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

Импортируйте изображения, анимации, аудио и шрифты через Studio"s Resource Tree . Разработав игру, вы сможете портировать её сразу на несколько платформ, используя кросс-платформенные решения от GameMaker.

Недавно YoYo Games анонсировали вторую часть программы для создания игр - GameMaker Studio 2 . Движок был полностью переделан, поменялся интерфейс, кодовая база и был добавлен ряд новых функций. Из нового: Room Editor, Brush Based Editing, Drag/Drop, Animation Support, удобные Tile Brushes и многое другое. Прочитайте полный список здесь: .

Пишем игру на HTML5/JS

javascript gamedev html5 canvas

На выходных нашлось немного свободного времени и я решил попрактиковаться в разработке. Давно собирался написать какую-нибудь игрушку, но все руки не доходили.

Как создать игру на Андроид с нуля самому

Бегло пробежался по сети в поисках как это делают настоящие гуру. Мне понравилась вот эта статья. За основу своей будущей игры я взял фреймворк автора статьи.

Начало

  • — библиотечка работы со спрайтами
  • — подгрузка ресурсов
  • — библиотека ввода с клавиатуры
  • — основной файл игры

Для плавности анимации будем использовать. Подробно о нем ознакомиться можно здесь

Разделим разработку нашей игры на несколько этапов:

  1. Создание и инициализация холста (canvas) на странице
  2. Добавление основной функции-цикла игры
  3. Обработка событий ввода пользователя
  4. Математика и расчет столкновений объектов в игре

Этап 1. Создание и инициализация холста

Первым делом что мы должны сделать — это создать элемент и добавить его к тегу основной страницы игры.

  • Создаем объект
  • Указываем, что мы создаем 2D игру (далее будем использовать везде в коде объект)
  • Задаем размеры холста
  • Добавляем холст к тегу на странице

Этап 2. Добавление основной функции-цикла

Основной цикл необходим для обновления и рендера игры.

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

Этап 3.

Инициализация и рендер объектов и ресурсов игры

Используем для загрузки ресурсов в игру. Хорошим правилом является добавить все изображения в 1 спрайт, но т.к я рисовал не сам, а брал готовые картинки, поэтому я решил с этим на заморачиваться, тем более, что в данном случае это не столь критично. Так это выглядит в коде

В функции загружаем мир и добавлеем хэндлер кнопки, после game over.

Начальное состояние

Обновление состояния игрового процесса

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

Здесь же используем. Всю функцию можно посмотреть в исходниках.

Этап 4. Обработка событий ввода пользователя

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

При клике на пробел по задумке должны ставиться башни которые будут стрелять случайным образом во все стороны. Чтобы немного усложнить процесс игры башни разрешается ставить на некоторм расстоянии друг от друга. В данном случае это.

Этап 5. Математика и расчет столкновений объектов в игре

Анимация персонажей, математика движения пуль, и логика движения NPC в игре описаны в функции. Вот тут как раз нам и потребуются базовые знания линейной алгебры.

Логика обновления анимации спрайтов башни. И создаем патроны для каждой башни в своем массиве.

Динамика пуль башни:

Напомню, что нашей целью было чтобы башни стреляли случайным образом во всех направлениях.

Пауков мы наделили простым интелектом и поэтому они ползут всегда за нами, чтобы нас укусить.

Полный код функции можно посмотреть в исходникак на GitHub.

Математика расчета столкновений хорошо описана в статье автора (раздел Collision Detection) используемого мной 2d бутстрапа.

Этап 6. Game Over и рестарт

Когда пауки доползают до нашего героя наступает конец игры.

Показываем окно GAME OVER и кнопку «Начать заного». Кликаем ее и все начинается сначала 🙂

Заключение

В итоге, я для себя понял, что в много плюсов:

  • Весело и интересно проводишь время
  • Повторяешь курс школьной геометрии. Если игра серьезней, то и универ вспоминаешь 🙂
  • Практика программирования игр
  • Удовлетворение от проделанной работы

Посмотреть исходники можно тут, поиграть здесь.

Разработка типичной игры

Создание игр — это увлекательное занятие для программиста. Но все игры строятся по общему сценарию. Есть несколько экранов для взаимодействия с пользователем:

Экран-заставка Заставка с изображением логотипа компании, сценки из игры, версии и т.д. Появляется на несколько секунд, а затем исчезает. Может воспроизводиться фоновая музыка Меню Второй экран, на котором пользователь может переходить по пунктам меню, напрмер, Играть, Счет, Настройки, Справка Основной экран Здесь собственно происходит игровой процесс Настройки Экран настроек параметров игры Счет Окно, на которое можно перейти из меню. Здесь можно отображать статистику достижений, таблицу рекордов Справка Выводится инструкция по игре: описание, управление, советы

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

  • SplashActivity — активность по умолчанию. Выводится на несколько секунд. После нее должна выводиться активность MenuActivity
  • MenuActivity — содержит кнопки, картинки и другие элементы, с помощью которых можно запустить другие активности
  • GameActivity — основной экран игры, где выводится графика, идет подсчет очков и т.д.
  • SettingsActivity — сохраняем различные настройки дли игры
  • ScoresActivity — загружает данные о достижениях игроков и выводит его пользователю для просмотра
  • HelpActivity — выводит справочную информацию. Если текст большой, то нужно также предусмотреть прокрутку

У каждого класса активности должен быть собственный файл разметки со своим набором элементов. Ваша задача научиться управлять состоянием приложения, пользоваться настройками, запускать нужные активности.

Также удобно создать еще один базовый класс Activity с общедоступными компонентами, например, BaseActivity.

Контекст приложения

Контекст приложения — это основа работы любого приложения, в том числе и игры. Он служит для получения доступа к настройкам и ресурсам, используемым несколькими экземплярами активностей.

Получить доступ к контексту приложения текущего процесса можно через метод getApplicationContext() :

Поскольку класс Activity происходит от класса Context, вы можете использовать ключевое слово this вместо явного указания контекста приложения.

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

Мы знаем, что класс Activity — это основной класс любого приложения на Android. Значит, нам понадобится пять различных классов Activity для нашей цели. В процессе игры пользователь будет переходить из одной активности в другую (кроме первой активности, где будет предусмотрен автоматический переход).

Есть несколько вариантов запуска активностей

  • Через указание в файле манифеста — так запускается автивность по умолчанию. В нашем случае это Splash-заставка
  • C помощью контекста приложения при помощи startActivity
  • Запуск дочерней активности из родительской активности

Заставка-экран

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

Меню игры

Экран меню игры служит для навигации по различным экранам игры.

Разработка типичной игры

Меню появляется сразу после экрана-заставки и предоставляет пользователю выбор дальнейших действий — перейти сразу к игре, прочитать инструкцию, посмотреть таблицу рекордов и так далее.

Экран справки

На данном экране пользователь может ознакомиться с правилами игры. Поэтому здесь нужно отобразить текст справки с возможностью прокрутки.

Счет или таблица рекордов

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

Экран настроек

На этом экране пользователь может редактировать и сохранять различные параметры, например, свое имя или аватар.

Основной экран

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

Реализация прототипа приложения

Создадим новый проект с активностью SplashActivity, которая будет вызываться первой. Далее нам нужно создать файлы макетов для каждой активности. Так как первой у нас будет вызываться заставка, то переименуйте файл main.xml в splash.xml. Затем можно сделать пять копий splash.xml и дать им новые имена: game.xml, help.xml, menu.xml, scores.xml и settings.xml.

Теперь открываем каждый файл разметки и меняем строчку android:text=»@string/hello» на android:text=»@string/splash» и т.п.

После этой операции вы не будете путаться в экранах.

Сразу можно позаботиться о новом значке для игры и добавить его в папку /drawable.

Мы уже договорились, что у нас будет основной класс BaseActivity. Создайте файл класса BaseActivity.java и вставьте минимальный код:

Вернитесь к файлу SplashActivity.java и расширьте (extends) его из класса BaseActivity вместо класса Activity.

Скопируйте активность SplashActivity и создайте новые классы MenuActivity, HelpActivity, ScoresActivity, SettingsActivity и GameActivity.

В каждом созданном классе нужно заменить в строчке setContentView(R.layout.splash); ресурс макета на соответствующий, например, для экрана настроек, это будет R.layout.settings .

Для проверки можно запустить проект на эмуляторе. Если все сделано правильно, то в окне эмулятора появится экран Заставки, который содержит текст Splash Screen.

Создание экрана-заставки

Наша задача — создать экран, который исчезнет сам после короткой паузы. Для игры можно использовать анимационную заставку, а также выводить информацию о версии, разработчике и т.д. Напоминаю, что для макета заставки у нас используется файл splash.xml в папке layout.

После анимации нужно запустить новый экран с меню и закрыть текущий экран.

Реклама

Статья проплачена кошками — всемирно известными производителями котят.

Если статья вам понравилась, то можете поддержать проект.

Статьи по теме: