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

  • Разработка под Android ,
  • Unity
  • Введение

    Прежде всего, хочу сразу отметить, что я не являюсь профессиональным разработчиком. В этой статье я постараюсь изложить свой опыт создания игры «Feel Speed Racing». Данный материал, скорее всего не будет интересен тем, кто уже имеет большой опыт в разработке игр, но начинающим разработчикам, которые хоть немного работали с Unity думаю, будет интересно.

    Дизайн

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

    Разработка

    Игра состоит из 2-х сцен: главное меню и сама игровая сцена:

    Где «menu» это главное меню а «1» это игровая сцена.

    Главное меню


    Для создания столь незамысловатого меню нам потребуется элемент управления GUI, который является стандартным в Unity.

    В качестве фона я использовал спрайт с именем «background» заполненный серым цветом. Вы же можете выбрать что угодно.

    Содержимое скрипта:

    Using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Runtime.Serialization.Formatters.Binary; using System.IO; public class menu: MonoBehaviour { public GUIStyle mystyle; //объявляется для того чтобы изменять начертание GUI компонентов(шрифт, размер и.т.п.) string score; //переменная для хранения пройденной дистанции void Start () { StreamReader scoredata = new StreamReader (Application.persistentDataPath + "/score.gd"); //создание файловой переменной score = scoredata.ReadLine (); //чтение строки scoredata.Close (); //закрытие файловой переменной } void Update () { } void OnGUI(){ GUI.Box (new Rect (Screen.width*0.15f, Screen.height*0.8f, Screen.width*0.7f, Screen.height*0.1f), "MAX DISTANCE:"+score,mystyle); //создаем небольшое окошко для показа пройденного расстояния if (GUI.Button (new Rect (Screen.width*0.15f, Screen.height*0.25f, Screen.width*0.7f, Screen.height*0.1f), "Start game",mystyle)) //создаем кнопку для запуска игровой сцены { Application.LoadLevel(1);//Загрузка игровой сцены } if (GUI.Button (new Rect (Screen.width*0.15f, Screen.height*0.4f, Screen.width*0.7f, Screen.height*0.1f), "Exit",mystyle)) //создаем кнопку для выхода из игры { Application.Quit();//Выход из игры } } }
    В результате должно получиться примерно вот так:

    Шрифт, цвет и размер GUI элементов вы можете изменить с помощью MyStyle.

    Создание игровой сцены

    Основными на этой сцене элементами является дорога, автомобиль и шкала топлива.

    1. Дорога:

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

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

    Затем добавляем как дочерние объекты внутрь дороги 4 блока с препятствиями, топливный бак и не забываем добавить к ним Box Collider 2D.Еще надо отметить Is Triger для пересечения с автомобилем.

    Теперь создаем скрипт moveroad.cs и вешаем его на нашу дорогу.

    Добавляем в него следующий код:

    Using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Runtime.Serialization.Formatters.Binary; using System.IO; public class moveroad: MonoBehaviour { public GUIStyle mystyle;//создание стиля int f,fuelst; float score=0,speed=-0.2f,data,fuelpos;// переменные для хранения расстояния, скорости и рекорда public GameObject block;// игровой объект для размещения блока public GameObject block1; public GameObject block2; public GameObject block3; public GameObject fuel; bool turbotriger=false; void Start () { StreamReader scoredata = new StreamReader (Application.persistentDataPath + "/score.gd"); data = float.Parse(scoredata.ReadLine ());//чтение с файла информации о рекорде scoredata.Close (); } void Update () { transform.Translate (new Vector3 (0f,speed,0f));//движение дороги с заданной выше скоростью score = score + (speed*-10);// подсчет расстояния if (transform.position.y < -19f) // если дорога уходит за пределы камеры то она "теле портируется" вверх { transform.position=new Vector3(0f,33.4f,0f);//новая позиция дороги block.transform.position=new Vector3(10.15f,block.transform.position.y,block.transform.position.z); block1.transform.position=new Vector3(8.42f,block1.transform.position.y,block1.transform.position.z); block2.transform.position=new Vector3(6.62f,block2.transform.position.y,block2.transform.position.z); block3.transform.position=new Vector3(4.95f,block3.transform.position.y,block3.transform.position.z); fuel.transform.position=new Vector3(11.86f,fuel.transform.position.y,fuel.transform.position.z); //скрытие за пределы камеры всех препятствий(блоков) f = Random.Range (0, 5);//случайное появление на дороге 1-го из 4-х блоков или канистры с бензином switch (f) { case 0:block.transform.position=new Vector3(2.40f,block.transform.position.y,block.transform.position.z); break; case 1:block1.transform.position=new Vector3(0.90f,block1.transform.position.y,block1.transform.position.z); break; case 2:block2.transform.position=new Vector3(-0.80f,block2.transform.position.y,block2.transform.position.z); break; case 3:block3.transform.position=new Vector3(-2.35f,block3.transform.position.y,block3.transform.position.z); break; case 4: fuelst=Random.Range(0,4); if(fuelst==0){fuelpos=2.40f;} if(fuelst==1){fuelpos=0.90f;} if(fuelst==2){fuelpos=-0.80f;} if(fuelst==3){fuelpos=-2.35f;} fuel.transform.position=new Vector3(fuelpos,fuel.transform.position.y,fuel.transform.position.z); break; } if (score>data)// если текущее пройденное расстояние превышает то что записано в файле рекорда то идет обновление данных { StreamWriter scoredata=new StreamWriter(Application.persistentDataPath + "/score.gd");//создаем файловую переменную для хранения пройденного расстояния scoredata.WriteLine(score);//записываем новое значение в файл scoredata.Close();//закрываем файловую переменную } } } void OnGUI(){ GUI.Box (new Rect (0, 0, Screen.width, Screen.height*0.05f), "Distance(m): " + score,mystyle);//создаем окно для подсчета расстояния } }

    Должно получиться примерно вот так. Если все так оставить то после того как дорога пройдет до конца то будет оставаться пустое пространство и так будет по кругу, дорога будет исчезать.

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

    Должно получиться вот так.

    2. Автомобиль:

    Кидаем спрайт автомобиля на сцену и устанавливаем его в любое место на дороге. Затем создаем скрипт carcontroller.cs и вешаем его на автомобиль.

    Содержимое carcontroller.cs:

    Using UnityEngine; using System.Collections; using UnityStandardAssets.CrossPlatformInput; public class carconroller: MonoBehaviour { void Start () { } public void Update () { if (transform.rotation.z !=0) //проверка столкновения коллайдера автомобиля и препятствия, при столкновении происходит загрузка меню { Application.LoadLevel (0); } } } public void OnGUI() { if (GUI.RepeatButton (new Rect (Screen.width*0.1f, Screen.height*0.9f, Screen.width*0.2f, Screen.height*0.08f), "L")) //создаем кнопку для движения влево { if (transform.position.x > -2.4f) { transform.Translate (new Vector3 (-0.05f, 0f, 0f)); } } if (GUI.RepeatButton (new Rect (Screen.width*0.7f, Screen.height*0.9f, Screen.width*0.2f, Screen.height*0.08f), "R")) //создаем кнопку для движения вправо { if (transform.position.x < 2.4f) { transform.Translate (new Vector3 (0.05f, 0f, 0f)); } } } }
    Теперь автомобиль может перемещаться.

    3.Шкала топлива:

    Для создания шкалы потребовалось 2 спрайта одинаковых размеров, но разных цветов (красный, зеленый). И сделать один из них дочерним (зеленый).

    Using UnityEngine; using System.Collections; public class fuelscript: MonoBehaviour { public GameObject fuelall; float mytimer=100f;// задание плавающего числа // Use this for initialization void Start () { } void Update () { mytimer = 100f; mytimer -= Time.deltaTime;//изменения числа с течением времени if (mytimer/mytimer==1f) //проверка на период времени в 1 секунду { fuelall.transform.position=new Vector3(fuelall.transform.position.x-0.0011f,fuelall.transform.position.y,fuelall.transform.position.z); fuelall.transform.localScale = new Vector3(fuelall.transform.localScale.x-0.001f, 1, 1); //выше идет сдвижение влево и уменьшение по ширине зеленой полосы для имитации шкалы } if (fuelall.transform.localScale.x < 0) //если шкала исчезла то загрузка идет загрузка главного меню { Application.LoadLevel(0); } } }

    Дорога у меня это road183 и ее дубликат road183(1). В ее дочерний объект fueltrack нужно добавить скрипт для обнаружения пересечения с автомобилем и восполнения топлива.

    Создаем скрипт triger.cs и вешаем его на fueltrack в обеих дорогах и отмечаем как Is Triger. Код:

    Using UnityEngine; using System.Collections; public class triger: MonoBehaviour { public GameObject fuel;//добавляем сюда greenfuel // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnTriggerEnter2D(Collider2D col) { if (col.gameObject.name == "playercar") //проверка пересечения автомобиля и объекта fuel { fuel.transform.position=new Vector3(0,fuel.transform.position.y,fuel.transform.position.z); fuel.transform.localScale = new Vector3(1, 1, 1); //восстановление у объекта fuel стандартных значений } } }

    Итог

    В момент выпуска игры на Google Play я особо не занимался ее продвижением ну и само собой закачек не набралось.

    В отсутствие профессионального художника, с иконкой пришлось работать самостоятельно:

    Кто не любит играть на компьютере или смартфоне? Таких людей, наверное, единицы.

    У некоторых игроманов любовь к играм заходит так далеко, что они начинают разбираться в самом устройстве развлечения, и мечтают сами создавать игры. Что ж, сегодня существует много возможностей для осуществления этой заветной мечты!

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

    Blender



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

    Инструментов для работы хватит как новичкам, так и профессионалам. Blender содержит в себе средства для моделирования, анимации, обработки видео и звука.

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

    А вот уроки по работе в этой программе вы найдете .

    Вперед, творить новые вселенные!

    Unity 3D


    Это мощная среда для разработки приложений и игр, в том числе для мобильных устройств. Созданные на Unity 3D игры работают на Windows, iOS, Android, Playstation 3, Xbox 360 и Wii. Можно создавать игры любых жанров; текстуры и модели легко импортируются, поддерживаются изображения всех популярных форматов.

    Скрипты в основном создаются на JavaScript, но код можно писать и на С#.

    Обучающие материалы по работе в среде (на английском языке) вы найдете на официальном сайте по ссылке .

    Construct Classic

    Конструктор двумерных и трехмерных игр с открытым исходным кодом. Для работы не нужны знания программирования. Достаточно добавить объект и включить анимацию.

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

    Конструктор не только бесплатный – у него открытый исходный код, и при желании вы можете настроить его и отредактировать по своему желанию.

    Уроки по Construct Classic вы можете посмотреть .

    Game Maker Lite



    Бесплатная программа для разработки простых игр, любого жанра: платформные, головоломки, экшн и 3D игры. Подойдет для новичков. Можно использовать собственные изображения и эффекты, или встроенные программу. Чтобы получить доступ к большему выбору изображений и эффектов, нужно зарегистрироваться.

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

    Уроки по работе в программе для новичков есть на этом сайте .

    Unreal Development Kit

    Бесплатный движок для создания игр. Очень мощный, с массой возможностей и инструментов для продвинутых визуализаций и детальных симуляций. Можно создавать игры для множества современных платформ.

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

    Видеоуроки и руководства по работе в программе можно посмотреть .

    Game Editor

    Редактор для создания простых двухмерных игр, под операционные системы Windows, iOS, Android, Linux.

    Есть встроенные наборы анимаций, который отвечают за внешний вид персонажей. Можно использовать свои графические элементы. Также программа предоставляет стандартный набор реакций, которые определяют поведение персонажа в игре. Но можно создавать и свои, на специальном скриптовом языке Game Editor.

    3D Rad



    Бесплатная программа для разработки 3D-игр и интерактивных приложений. Использовать код не нужно, поэтому создавать свои игры достаточно просто.

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

    Game Maker: Studio

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

    В рабочем окне программы нет ничего лишнего. Игры, разработанные на Game Maker: Studio кроссплатформенны, и готовые приложения можно интегрировать со Steam.

    NeoAxis 3D Engine

    Универсальная среда для разработки 3D проектов.
    Это готовый движок со своими моделями, текстурами, физикой, шаблонами и графикой. Тут даже есть 24 готовые, полноценные карты!
    На нем можно создавать не только игры, но и одиночные модели, сложную визуализацию программного обеспечения.

    Остается только включать фантазию и творить.

    Зачесались руки создать свою игру? Нет проблем. Выбирайте программу и вперед, к мечте!

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

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

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

    Мощная система событий

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

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

    Создание событий для игры происходит вполне простым и понятным образом. Просто указываете объект, выбираете условие или действие и добавляете его в событие. Construct 2 поможет вам научиться думать в логической последовательности и понимать реальные концепции программирования, что делает его прекрасным начальным инструментом, если вы решите потом изучать какой-либо язык программирования.

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

    Продвинутая логика событий - условия OR/Else, под-события, локальные переменные и рекурсивные функции - позволяют создавать сложные системы без изучения более трудного языка программирования.

    Гибкие поведения


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

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

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

    Например, добавив поведение Platform (Платформер) к спрайту, он сразу сможет бегать и прыгать по платформам, имеющим свойство Solid (Твердый). Если необходимо, вы можете настраивать скорость, высоту прыжка, гравитацию и т.д. до тех пор, пока не получите желанный результат.

    Благодаря простоте использования, поведения прекрасно подходят для новичков, которые могут применить их и получить мгновенный результат. Однако для опытных пользователей они также делают разработку намного проще. Хотите, например, чтобы объект двигался и вращался вместе с другим объектом? Просто добавьте поведение Pin (Прикрепить)! Это в буквальном смысле занимает всего несколько секунд и не вызывает никаких сложностей.

    Мгновенный предпросмотр


    В Construct 2 вы в любое время можете делать мгновенный предпросмотр ваших игр. Не нужно ждать компиляции или других трудоемких процессов. Нажатием всего одной кнопки игра сразу же запускается в окне браузера и готова для тестирования.

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

    Еще одна удобная функция - это предпросмотр через Wifi. Она позволяет любым смартфонам, планшетам, ноутбукам и даже другим ПК подсоединяться к вам посредством LAN/Wifi. Это делает Construct 2 чрезвычайно удобным для тестирования игр на разных устройствах, таких как планшеты и телефоны!

    Нет никаких ограничений на количество устройств, используемых для предпросмотра через LAN/Wifi - вы можете иметь несколько устройств одновременно и обновлять их в одно и то же время, что позволяет быстро тестировать игру сразу на многих платформах. Эта функция также неоценима, если необходимо быстро проверить, работают ли события прикосновения на устройствах с сенсорными экранами.

    Красивые спецэффекты


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

    Программа имеет более 70 эффектов WebGL, среди которых деформация, искажение, смешивание, размытие, изменение цвета и т.д. Эффекты можно добавлять к объектам, слоям и уровням, а также совмещать их для достижения классных результатов. Более того, вы можете видеть всё, что применяете, прямо в редакторе в реальном времени.

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

    Другая удобная функция - это плагин Particles (Частицы). Он работает путем создания и перемещения большого количества мелких изображений, легко генерируя брызги, искры, дым, воду, мусор и всё, что вы только сможете придумать. Это действительно универсальный объект, способный создавать много различных видов визуальных эффектов.

    Мультиплатформенный экспорт

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

    Выкладывайте игры в интернете на своем собственном сайте, Chrome Web Store, Facebook, Kongregate, NewGrounds, Firefox Marketplace или используйте Scirra Arcade, чтобы делиться своими творениями. Экспортируйте как приложение на PC, Mac или Linux, используя Node-Webkit. Кроме того, есть возможность сделать проект для Windows 8 Store или выпустить его как оригинальное Windows Phone 8 приложение.

    Также вы легко можете делать экспорт на такие популярные платформы как iOS и Android, используя сервисы CocoonJS, appMobi и PhoneGap - все три имеют встроенную поддержку, так что выбирайте какой больше нравится.

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

    Легкая расширяемость

    Construct 2 поставляется с 30 встроенными плагинами, 25 поведениями и 70 визуальными эффектами. Они затрагивают как отображение текста и спрайтов, звуки, воспроизведение музыки, так и ввод, обработку и хранение данных, эффекты частиц, готовые движения, Photoshop-подобные эффекты и многое другое.

    Если вы опытный пользователь и нуждаетесь в дополнительной функциональности, Construct 2 позволяет создавать свои собственные плагины и поведения с помощью Javascript SDK, к которому имеется полная документация. Вы также можете создавать свои собственные визуальные эффекты с помощью GLSL языка шейдеров.

    Энтузиасты сообщества Construct 2 написали уже более 150 своих плагинов и поведений. Это действительно легко, нет необходимости в каких-либо специальных инструментах! Всё, что вам нужно, это текстовый редактор и немного знаний JavaScript или GLSL. Это также отличное начало пути в мир реального программирования для ваших игр.

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

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

    ————————————-

    Defold Game Engine

    В этой статье я хочу познакомить вас с весьма молодым и бесплатным игровым движком для создания игр ААА класса - Defold Game Engine . Этот движок разработали Рагнар Свенссон и Кристиан Мюррэй в 2014 году и уже существует более 20 тыс. пользователей и больше 30 тыс. проектов на этом движке.

    Defold работает на MacOS/OS х, Windows и Linux (32 бит и 64 бит). С его помощью можно создать игру для 6 известных платформ iOS, Android ,HTML5, а также для MacOS/OS х, Windows и Linux.

    Defold - представляет собой полноценный 3D — движок, однако набор инструментов сделан для 2D, так что для создания 3D игр придется делать много тяжелой работы самостоятельно. Улучшение инструментов для создания 3D, разработчики планирую в ближайшем будущем. Все приложения и игровая логика в Defold осуществляется с помощью скриптов на языке lua. Lua - это легкий, динамичный язык, который является быстрым и очень мощным.

    ————————————-

    Amazon Lumberyard

    На игровом движке lumberyard можно создавать высококачественные игры класса ААА для PC, Xbox One и PlayStation 4, в скором будущем анонсирована поддержка устройств iOS и Android, с глубокой интеграцией в Amazon Web Services и привлечением фанатов в сервисе Twitch, так же движок Lumberyard можно будет использовать и в создании мультиплатформенных игр, так как он теперь имеет собственный сетевой движок.

    Lumberyard создан не «с нуля» он основан на коде движка CryEngine, в середине лета 2015 года компания Amazon приобрела широкую лицензию на движок CryEngine, но как утверждают разработчики в систему было заложено множество нововведений и возможностей такие как: инструмент для создания растений, инструмент для создания скелетной анимации, редактор частиц, шейдеры на основе физики, модульные геммы, облегчающие работу с природными эффектами и многое другое.

    ————————————-

    CryEngine 5

    CryEngine - игровой движок, созданный немецкой частной компанией Crytek в 2002 году и первоначально используемый в шутере от первого лица Far Cry . В середине марта компания предоставила миру новый, пятый CryEngine . Движок абсолютно бесплатен и воспользоваться им, может любой желающий, с помощью которогоможно создать игру, различного жанра и различной сложности.

    1. CryEngine Sandbox: редактор игры в реальном времени, предлагающий обратную связь «Что Вы видите, то Вы и ИГРАЕТЕ».
    2. Рендерер: интегрированные открытые (англ. outdoor ) и закрытые (англ. indoor ) локации без швов. Также рендерер поддерживает OpenGL и DirectX 8/9, Xbox с использованием последних аппаратных особенностей, PS2 и GameCube, а также Xbox 360.
    3. Физическая система: поддерживает инверсную кинематику персонажей, транспортные средства, твёрдые тела, жидкость, тряпичные куклы (англ. rag doll ), имитацию ткани и эффекты мягкого тела. Система объединена с игрой и инструментами.
    4. Инверсная кинематика персонажей и смешанная анимация: позволяет модели иметь множественные анимации для лучшей реалистичности.
    5. Система игрового искусственного интеллекта: включает командный интеллект и интеллект, определяемый скриптами. Возможность создания особенных врагов и их поведения, не касаясь кода C++.
    6. Интерактивная динамическая система музыки: музыкальные дорожки отвечают действиям игрока и ситуации и предлагают качество CD-диска с полным 5.1 звуковым окружением.

    ————————————-

    Construct Classic

    Construct Classic - небольшая программа, основной функцией которой является создание игр, 2d-анимационных роликов и мультфильмов. Данный конструктор создан по принципу WYSIWYG. Это значит, что вам не предстоит для создания собственного анимационного ролика подолгу сидеть за учебниками программирования. Все гораздо проще - добавили какой-то объект, включили для него анимацию и он начинает двигаться.

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

    Основные возможности Construct Classic:

    • Система редактирования событий и реакции на них посредством drag-n-drop.
    • Возможность использования огромного количества плагинов.
    • Программа создана на python, но дорабатывать ее можно на C++.
    • Есть возможность подключать пиксельные шейдеры на HLSL.
    • К программе можно подключать готовые исходные коды игр и приложений в формате САР.

    Изменения в последней версии

    • Физика: Исправлен баг версии r1, когда физические объекты созданные после старта, могли улететь за экран на высокой скорости.
    • Поведение: Исправлен баг. когда вы не могли спрыгнуть с платформы. Вызван исправлением бага «приземления в воздухе» в версии r1. Оба исправления теперь работают.
    • Установщик: Исправлена проблема с установкой в версии r1.

    ————————————-

    GameMaker: Studio

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

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

    Основные возможности GameMaker: Studio:

    • Кроссоплатформенность. Без особых трудностей можно создавать игры для Windows, Android, Linux.
    • Удобное рабочее окно программы, где нет ничего лишнего.
    • Возможность создания небольших двухмерных игр за считанные часы.
    • Готовые приложения можно интегрировать со Steam.
    • К приложению можно подключать готовые шаблоны, пошагово менять пути, объекты, звуки, фоны, скрипты и делать из этого всего интересные и необычные игры.
    • GameMaker классно подойдет для разработки игр и приложений на мобильных платформах.

    ————————————-

    Game Editor

    Game Editor - бесплатный конструктор для создания несложных двухмерных игр для операционных систем Windows, Mac, Linux, IOS, Android. Создаваемые игры представляет собой набор игровых объектов, каждому из которых задается реакция на определенное событие, что определяет их поведение в игре.

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

    Основные возможности Game Editor:

    • Простой и легкий для восприятия интерфейс.
    • Готовое приложение можно экспортировать на Windows, Linux, Android, IOS.
    • Созданную игру можно сразу протестировать, в любой момент остановить ее и снова начать редактировать.
    • Возможность использования графических файлов в форматах JPEG, GIF, PNG, BMP, PCX, TGA, XPM, XCF и TIF.
    • Возможность использования аудио файлов в форматах Ogg Vordis, MID, MOD, S3M, IT и ХМ.

    ————————————-

    3D Rad

    3D Rad - бесплатная программа для простого создания (без использования кода) различных ЗD-игр, интерактивных приложений и физических симуляций. Создание приложений в 3D Rad основывается на сочетании в различных комбинациях компонентов (объектов) и настройки взаимодействия между ними. Физика базируется на учете взаимодействия между объектами.

    В 3D Rad есть функция импорта моделей в создаваемый проект, большое количество примеров и образцов трехмерных объектов, а также возможность добавления звуковых эффектов в формате WAV или OGG. Работы сделаны с помощью 3D Rad можно распространять в виде отдельных программ или веб-приложений.

    Основные возможности 3D Rad:

    • Создание качественных ЗD-игр.
    • Реалистичная физика взаимодействия объектов.
    • Возможность импорта моделей.
    • Качественная обработка графики.
    • Возможность применения искусственного интеллекта.
    • Возможность использования мультиплеера.
    • Высококачественные аудиоэффекты и музыка
    • Возможность встраивания игр на веб-страницы.

    ————————————-

    Unreal Development Kit

    Unreal Development Kit (UDK) - мощный бесплатный движок и среда разработки с огромными возможностями по созданию игр для большого количества платформ и операционных систем. Он содержит все инструменты для создания ЗD-игр, продвинутых визуализаций и детальных симуляций.

    В состав Unreal Development Kit входит полностью интегрированная среда редактирования Unreal Editor, а также наборы готовых скриптов, спрайтов, текстур и звуков. Их можно комбинировать между собой, прописывать условия их взаимодействия, создавая при этом новые игры.

    Основные возможности Unreal Development Kit:

    • Возможность создания игр для Windows, Mac OS, Xbox, PlayStation 3, Wii, Android.
    • Простой и удобный высокоуровневый язык программирования UnrealScript.
    • Реалистический свет, тени и эффекты.
    • Продвинутая физика поведения и взаимодействия предметов.
    • Поддержка LAN и прямого подключения к IP.
    • Возможность тестирования создаваемого приложения на любом этапе его проектирования.
    • Многопоточный рендеринг создаваемых игр.
    • Готовые шаблоны игр.

    ————————————-

    NeoAxis 3D Engine

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

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

    Основные возможности NeoAxis 3D Engine:

    • Установленная программа состоит из ряда отдельных приложений - конфигуратора, демонстрационных возможностей программы, редактора карт и редактора основного кода.
    • Приложения, разработанные с помощью среды NeoAxis, могут быть запущены на Windows и Mac OS X
    • Весь спектр возможностей встроенного NVIDIA PhysX. Поддержка регдолл и транспортных средств.
    • Встроенная поддержка синхронизации по LAN и интернет.
    • Приложение поддерживает огромный перечень языков, английский, украинский, русский есть в наличии.
    • Редактор построен очень удобно - все ресурсы программы четко структурированы по отдельным тематическим папкам.
    • Программа состоит из готовых наборов объектов, карт и моделей, поэтому разобраться в ней сможет любой школьник.

    ————————————-

    Game Maker Lite

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

    Game Maker отличается тем, что для создания игр в нем не нужно знания каких-либо языков программирования, хотя возможности использования скриптов также присутствует.

    Основные возможности Game Maker:

    • Простой и интуитивно понятный интерфейс программы.
    • Встроенные уроки по созданию первых игр.
    • Программирование с помощью drag-n-drop.
    • Бесплатная коллекция бесплатных изображений и звуков для игр.
    • Возможность создания простых ЗD-игр.
    • Встроенный язык программирования Game Maker Language (GML), позволяющий разрабатывать более функциональные и интересные игры.

    Внимание:

    Бесплатная версия Game Maker ограниченна в функциональности, а при запуске созданных в ней игр показывается логотип программы.

    ————————————-

    Unity 3D

    Unity 3D - мощная среда разработки, которая позволяет легко создать игру. Созданные с помощью Unity 3D игры и приложения работают в операционных системах Windows, OS X, Android. iOS, Linux, Blackberry а также на игровых приставках Wii, PlayStation 3 и Xbox 360. Приложения, созданные с помощью Unity, поддерживают DirectX и OpenGL.

    С помощью Unity 3D можно создавать видеоигры любых жанров. Разработчик может легко импортировать текстуры, модели и звуки. Для текстур поддерживаются все популярные форматы изображений. Создание скриптов осуществляется, в основном, с помощью JavaScript, хотя коды можно писать и на С#.

    Основные возможности Unity 3D:

    • Широкие возможности настройки.
    • Доступный и понятный интерфейс.
    • Сценарии на С#. JavaScript и Boo.
    • Полная интеграция игрового движка со средой разработки.
    • Поддержка перетягивания объектов в редакторе.
    • Поддержка импорта большого количества форматов.
    • Встроенная поддержка сети.
    • Поддержка физики ткани (PhysX Cloth).
    • Возможность дополнения функционала.
    • Инструменты для совместной разработки.
    • Blender - бесплатный пакет для создания трехмерной (3D) компьютерной графики, содержащий средства моделирования, анимации, рендеринга, постобработки видео, а также создания игр. Функций Blender вполне достаточно для работы как обычным пользователям, так и профессионалам. В программе есть все основные инструменты, используемые в профессиональных ЗD-редакторах.

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

      Основные возможности Blender:

      • Поддержка разнообразных геометрических примитивов (включая полигональные модели, систему быстрого моделирования в режиме SubSurf, кривые Безье, поверхности NURBS, метасферы, скульптурное моделирование и векторные шрифты).
      • Универсальные встроенные механизмы рендеринга и интеграция с внешним рендерером YafRay.
      • Инструменты анимации, среди которых инверсная кинематика, скелетная анимация и сеточная деформация, анимация по ключевым кадрам, нелинейная анимация, редактирование весовых коэффициентов вершин, ограничители, динамика мягких тел, динамика твердых тел, система волос на основе частиц и система частиц с поддержкой коллизий
      • Python используется как средство создания инструментов и прототипов, системы логики в играх, как средство импорта и экспорта файлов, автоматизации задач.
      • Базовые функции нелинейного редактирования и комбинирования видео.
      • Game Blender - подпроект Blender, предоставляющий интерактивные функции, такие как определение коллизий, движок динамики и программируемая логика.

      ————————————-

      Stencyl

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

      Пользователям, которые работали в Photoshop, понравится графический редактор Scene Designer, предназначенный для рисования игровых миров. Его инструментарий поразительно напоминает меню популярного фоторедактора.

      ————————————-

      CraftStudio

      Добавляйте и изменяйте объекты в 3D пространстве, прописывайте сценарии и правила, рисуйте анимации и эффекты. Авторы CraftStudio продумали всё, чтобы создание игр на PC с нуля в реальном времени было понятным и увлекательным. При этом все инструменты для моделирования и анимаций встроены в программу и понятно обозначены. То же самое можно сказать и о визуальном редакторе сценариев. Что самое интересное — вы не обнаружите проблем с совместимостью форматов или их конвертацией. Для более продвинутых пользователей предусмотрен текстовый редактор Lua Scripting.



    Этот туториал предназначен в первую очередь для новичков в разработке под андроид, но может быть будет полезен и более опытным разработчикам. Тут рассказано как создать простейшую 2D игру на анроиде без использования каких-либо игровых движков. Для этого я использовал Android Studio, но можно использовать любую другую соответствующее настроенную среду разработки.

    Шаг 1. Придумываем идею игры
    Для примера возьмём довольно простую идею:

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


    Шаг 2. Создаём проект
    В Android Studio в верхнем меню выбираем File > New > New Project.

    Тут вводим название приложения, домен и путь. Нажимаем Next.

    Тут можно ввести версию андроид. Также можно выбрать андроид часы и телевизор. Но я не уверен что наше приложение на всём этом будет работать. Так что лучше введите всё как на скриншоте. Нажимаем Next.

    Тут обязательно выбираем Empty Activity. И жмём Next.

    Тут оставляем всё как есть и жмём Finish. Итак проект создан. Переходим ко третьему шагу.

    Шаг 3. Добавляем картинки

    Шаг 5. Редактируем MainActivity класс

    В первую очередь в определение класса добавляем implements View.OnTouchListener. Определение класса теперь будет таким:

    Public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
    Добавим в класс нужные нам статические переменные (переменные класса):

    Public static boolean isLeftPressed = false; // нажата левая кнопка public static boolean isRightPressed = false; // нажата правая кнопка
    В процедуру protected void onCreate(Bundle savedInstanceState) {
    добавляем строки:

    GameView gameView = new GameView(this); // создаём gameView LinearLayout gameLayout = (LinearLayout) findViewById(R.id.gameLayout); // находим gameLayout gameLayout.addView(gameView); // и добавляем в него gameView Button leftButton = (Button) findViewById(R.id.leftButton); // находим кнопки Button rightButton = (Button) findViewById(R.id.rightButton); leftButton.setOnTouchListener(this); // и добавляем этот класс как слушателя (при нажатии сработает onTouch) rightButton.setOnTouchListener(this);
    Классы LinearLayout, Button и т.д. подсвечены красным потому что ещё не добавлены в Import.
    Чтобы добавить в Import и убрать красную подсветку нужно для каждого нажать Alt+Enter.
    GameView будет подсвечено красным потому-что этого класса ещё нет. Мы создадим его позже.

    Теперь добавляем процедуру:

    Public boolean onTouch(View button, MotionEvent motion) { switch(button.getId()) { // определяем какая кнопка case R.id.leftButton: switch (motion.getAction()) { // определяем нажата или отпущена case MotionEvent.ACTION_DOWN: isLeftPressed = true; break; case MotionEvent.ACTION_UP: isLeftPressed = false; break; } break; case R.id.rightButton: switch (motion.getAction()) { // определяем нажата или отпущена case MotionEvent.ACTION_DOWN: isRightPressed = true; break; case MotionEvent.ACTION_UP: isRightPressed = false; break; } break; } return true; }
    Если кто-то запутался? вот так в результате должен выглядеть MainActivity класс:

    Package com.spaceavoider.spaceavoider; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; public class MainActivity extends AppCompatActivity implements View.OnTouchListener { public static boolean isLeftPressed = false; // нажата левая кнопка public static boolean isRightPressed = false; // нажата правая кнопка @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GameView gameView = new GameView(this); // создаём gameView LinearLayout gameLayout = (LinearLayout) findViewById(R.id.gameLayout); // находим gameLayout gameLayout.addView(gameView); // и добавляем в него gameView Button leftButton = (Button) findViewById(R.id.leftButton); // находим кнопки Button rightButton = (Button) findViewById(R.id.rightButton); leftButton.setOnTouchListener(this); // и добавляем этот класс как слушателя (при нажатии сработает onTouch) rightButton.setOnTouchListener(this); } public boolean onTouch(View button, MotionEvent motion) { switch(button.getId()) { // определяем какая кнопка case R.id.leftButton: switch (motion.getAction()) { // определяем нажата или отпущена case MotionEvent.ACTION_DOWN: isLeftPressed = true; break; case MotionEvent.ACTION_UP: isLeftPressed = false; break; } break; case R.id.rightButton: switch (motion.getAction()) { // определяем нажата или отпущена case MotionEvent.ACTION_DOWN: isRightPressed = true; break; case MotionEvent.ACTION_UP: isRightPressed = false; break; } break; } return true; } }
    Итак, класс MainActivity готов! В нём инициирован ещё не созданный класс GameView. И когда нажата левая кнопка - статическая переменная isLeftPressed = true, а когда правая - isRightPressed = true. Это в общем то и всё что он делает.

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

    Шаг 6. Создаём класс GameView

    Теперь наконец-то создадим тот самый недостающий класс GameView. Итак приступим. В определение класса добавим extends SurfaceView implements Runnable. Мобильные устройства имею разные разрешения экрана. Это может быть старенький маленький телефон с разрешением 480x800, или большой планшет 1800x2560. Для того чтобы игра выглядела на всех устройствах одинаково я поделил экран на 20 частей по горизонтали и 28 по вертикали. Полученную единицу измерения я назвал юнит. Можно выбрать и другие числа. Главное чтобы отношение между ними примерно сохранялось, иначе изображение будет вытянутым или сжатым.

    Public static int maxX = 20; // размер по горизонтали public static int maxY = 28; // размер по вертикали public static float unitW = 0; // пикселей в юните по горизонтали public static float unitH = 0; // пикселей в юните по вертикали
    unitW и unitW мы вычислим позже. Также нам понадобятся и другие переменные:

    Private boolean firstTime = true; private boolean gameRunning = true; private Ship ship; private Thread gameThread = null; private Paint paint; private Canvas canvas; private SurfaceHolder surfaceHolder;
    Конструктор будет таким:

    Public GameView(Context context) { super(context); //инициализируем обьекты для рисования surfaceHolder = getHolder(); paint = new Paint(); // инициализируем поток gameThread = new Thread(this); gameThread.start(); }
    Метод run() будет содержать бесконечный цикл. В начале цикла выполняется метод update()
    который будет вычислять новые координаты корабля. Потом метод draw() рисует корабль на экране. И в конце метод control() сделает паузу на 17 миллисекунд. Через 17 миллисекунд run() запустится снова. И так до пока переменная gameRunning == true. Вот эти методы:

    @Override public void run() { while (gameRunning) { update(); draw(); control(); } } private void update() { if(!firstTime) { ship.update(); } } private void draw() { if (surfaceHolder.getSurface().isValid()) { //проверяем валидный ли surface if(firstTime){ // инициализация при первом запуске firstTime = false; unitW = surfaceHolder.getSurfaceFrame().width()/maxX; // вычисляем число пикселей в юните unitH = surfaceHolder.getSurfaceFrame().height()/maxY; ship = new Ship(getContext()); // добавляем корабль } canvas = surfaceHolder.lockCanvas(); // закрываем canvas canvas.drawColor(Color.BLACK); // заполняем фон чёрным ship.drow(paint, canvas); // рисуем корабль surfaceHolder.unlockCanvasAndPost(canvas); // открываем canvas } } private void control() { // пауза на 17 миллисекунд try { gameThread.sleep(17); } catch (InterruptedException e) { e.printStackTrace(); } }
    Обратите внимание на инициализацию при первом запуске. Там мы вычисляем количество пикселей в юните и добавляем корабль. Корабль мы ещё не создали. Но прежде мы создадим его родительский класс.

    Шаг 7. Создаём класс SpaceBody

    Он будет родительским для класса Ship (космический корабль) и Asteroid (астероид). В нём будут содержаться все переменные и методы общие для этих двух классов. Добавляем переменные:

    Protected float x; // координаты protected float y; protected float size; // размер protected float speed; // скорость protected int bitmapId; // id картинки protected Bitmap bitmap; // картинка
    и методы

    Void init(Context context) { // сжимаем картинку до нужных размеров Bitmap cBitmap = BitmapFactory.decodeResource(context.getResources(), bitmapId); bitmap = Bitmap.createScaledBitmap(cBitmap, (int)(size * GameView.unitW), (int)(size * GameView.unitH), false); cBitmap.recycle(); } void update(){ // тут будут вычисляться новые координаты } void drow(Paint paint, Canvas canvas){ // рисуем картинку canvas.drawBitmap(bitmap, x*GameView.unitW, y*GameView.unitH, paint); }
    Шаг 8. Создаём класс Ship

    Теперь создадим класс Ship (космический корабль). Он наследует класс SpaceBody поэтому в определение класа добавим extends SpaceBody.

    Напишем конструктор:

    Public Ship(Context context) { bitmapId = R.drawable.ship; // определяем начальные параметры size = 5; x=7; y=GameView.maxY - size - 1; speed = (float) 0.2; init(context); // инициализируем корабль }
    и переопределим метод update()

    @Override public void update() { // перемещаем корабль в зависимости от нажатой кнопки if(MainActivity.isLeftPressed && x >= 0){ x -= speed; } if(MainActivity.isRightPressed && x <= GameView.maxX - 5){ x += speed; } }
    На этом космический корабль готов! Всё компилируем и запускаем. На экране должен появиться космический корабль. При нажатии на кнопки он должен двигаться вправо и влево. Теперь добавляем сыплющиеся сверху астероиды. При столкновении с кораблём игра заканчивается.

    Шаг 9. Создаём класс Asteroid

    Добавим класс Asteroid (астероид). Он тоже наследует класс SpaceBody поэтому в определение класса добавим extends SpaceBody.

    Добавим нужные нам переменные:

    Private int radius = 2; // радиус private float minSpeed = (float) 0.1; // минимальная скорость private float maxSpeed = (float) 0.5; // максимальная скорость
    Астероид должен появляться в случайной точке вверху экрана и лететь вниз с случайной скоростью. Для этого x и speed задаются при помощи генератора случайных чисел в его конструкторе.

    Public Asteroid(Context context) { Random random = new Random(); bitmapId = R.drawable.asteroid; y=0; x = random.nextInt(GameView.maxX) - radius; size = radius*2; speed = minSpeed + (maxSpeed - minSpeed) * random.nextFloat(); init(context); }
    Астероид должен двигаться с определённой скорость вертикально вниз. Поэтому в методе update() прибавляем к координате x скорость.

    @Override public void update() { y += speed; }
    Так же нам нужен будет метод определяющий столкнулся ли астероид с кораблём.

    Public boolean isCollision(float shipX, float shipY, float shipSize) { return !(((x+size) < shipX)||(x > (shipX+shipSize))||((y+size) < shipY)||(y > (shipY+shipSize))); }
    Рассмотрим его поподробнее. Для простоты считаем корабль и астероид квадратами. Тут я пошёл от противного. То есть определяю когда квадраты НЕ пересекаются.

    ((x+size) < shipX) - корабль слева от астероида.
    (x > (shipX+shipSize)) - корабль справа от астероида.
    ((y+size) < shipY) - корабль сверху астероида.
    (y > (shipY+shipSize)) - корабль снизу астероида.

    Между этими четырьмя выражениями стоит || (или). То есть если хоть одно выражение правдиво (а это значит что квадраты НЕ пересекаются) - результирующие тоже правдиво.

    Всё это выражение я инвертирую знаком!. В результате метод возвращает true когда квадраты пересекаются. Что нам и надо.

    Про определение пересечения более сложных фигур можно почитать .

    Шаг 10. Добавляем астероиды в GameView

    В GameView добавляем переменные:

    Private ArrayList asteroids = new ArrayList<>(); // тут будут харанится астероиды private final int ASTEROID_INTERVAL = 50; // время через которое появляются астероиды (в итерациях) private int currentTime = 0;
    также добавляем 2 метода:

    Private void checkCollision(){ // перебираем все астероиды и проверяем не касается ли один из них корабля for (Asteroid asteroid: asteroids) { if(asteroid.isCollision(ship.x, ship.y, ship.size)){ // игрок проиграл gameRunning = false; // останавливаем игру // TODO добавить анимацию взрыва } } } private void checkIfNewAsteroid(){ // каждые 50 итераций добавляем новый астероид if(currentTime >= ASTEROID_INTERVAL){ Asteroid asteroid = new Asteroid(getContext()); asteroids.add(asteroid); currentTime = 0; }else{ currentTime ++; } }
    И в методе run() добавляем вызовы этих методов перед вызовоом control().

    @Override public void run() { while (gameRunning) { update(); draw(); checkCollision(); checkIfNewAsteroid(); control(); } }
    Далее в методе update() добавляем цикл который перебирает все астероиды и вызывает у них метод update().

    Private void update() { if(!firstTime) { ship.update(); for (Asteroid asteroid: asteroids) { asteroid.update(); } } }
    Такой же цикл добавляем и в метод draw().

    Private void draw() { if (surfaceHolder.getSurface().isValid()) { //проверяем валидный ли surface if(firstTime){ // инициализация при первом запуске firstTime = false; unitW = surfaceHolder.getSurfaceFrame().width()/maxX; // вычисляем число пикселей в юните unitH = surfaceHolder.getSurfaceFrame().height()/maxY; ship = new Ship(getContext()); // добавляем корабль } canvas = surfaceHolder.lockCanvas(); // закрываем canvas canvas.drawColor(Color.BLACK); // заполняем фон чёрным ship.drow(paint, canvas); // рисуем корабль for(Asteroid asteroid: asteroids){ // рисуем астероиды asteroid.drow(paint, canvas); } surfaceHolder.unlockCanvasAndPost(canvas); // открываем canvas } }
    Вот и всё! Простейшая 2D игра готова. Компилируем, запускаем и смотрим что получилось!
    Если кто-то запутался или что-то не работает можно скачать исходник .

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

    На этом всё. Пишите отзывы, вопросы, интересующие вас темы для продолжения.

    Похожие статьи