Pull to refresh
0
Corona Labs
2D-движок и экосистема для создания игр

Как примерить корону

Reading time 4 min
Views 21K
Эта статья для тех, кому быстро надоедает играть в Angry Birds, 2048 или Lord of Rings и в чьих головах начинают зреть сценарии собственных игр. Я полагаю, на местном ресурсе таких индивидуумов не менее 95 процентов. Оставшиеся 5 процентов (скорей всего уже реализовавшие собственные идеи в виде приложений) могут пока погулять.

Знаете, еще 100 лет назад каждый приличный человек писал стихи. Сейчас каждый приличный человек пишет собственную 2Д игру. И самый главный вопрос — как быстро проверить играбельность своей идеи? Что увлекательней и рациональней — тыкать пальцем или кликать мышкой? Где сидят твои пользователи? На Андроиде или iOS-е? Под Windows, Linux или Mac? Каким инструментом пилить дерево познания?

Я проверил один из инструментов. Не исключено, что он может подойти тебе, приятель.

Как максимально быстро написать свою 2D инди-игру? Скажем, крейзи-домино или секс-пакман. Расскажу про собственный опыт.

Все начинается с обыкновенного телефона. В который звонят. Который с тобой в минуты ожиданий или одиночества. Разумеется, ты начинаешь делать игру под свой телефон. Забаву, в которую интересно играть именно тебе. Если у тебя iPhone (говорят, еще есть Андроид), то тебе надо

  • скачать Xcode с сайта Apple
  • изучить язык программирования Obj-C Swift
  • освоить iOS SDK

На все три пункта уйдет 30 минут + 30 дней + 30 недель твоей драгоценной жизни. Это, конечно, немного, но утомительно.

Однако, к тому времени, когда ты станешь профессионалом в iOS разработке, собачка может подрасти. Блондинка сменит брюнетку. Жизнь изменится. Тебе заново придется изучать Джаву, Эклипс или Андроид-студию. А это еще год жизни. Мало того! Тебе захочется приспособить свою мобильную игру под десктоп (как мне через 7 лет iOS разработки) — и снова давай! изучай! новый инструмент!, язык! и настраивай эко-среду!

Что же делать? Как быть? В чем сила, брат?

Вот мой ответ, читатель.

Цель — создать 2Д игру без затрат и головной боли на все платформы


Март 2018 года. В мире существует три популярных бесплатных инструмента для создания универсальных 2Д игр. Это

  • cocos2d
  • defold
  • Corona

Чисто филологически я выбрал Corona. Представьте, если бы я взял cocos2d?!

Тебя спрашивают: -На чем сидишь?
-На кокосе…

Звучит двусмысленно, даже криминально…
Defold — тоже что-то определенно старое. Definitely old)

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

Установка окружения и среды разработки


Заняло 30 минут. Действовал строго по инструкции. Скачиваем SDK, затем любой из рекомендуемых текстовых редакторов (можно использовать свой любимый редактор) и плагин для редактора.

Я установил Atom. Это универсальный бесплатный редактор, которым я никогда в жизни не пользовался. К Atom-у установил плагин для языка Lua (подсказки, автодополнения). Да, все что вы будете творить в Corone, пишется на языке Lua. На сленге русских разработчиков — ЛУНА. По мне, это смесь php, python и swift. Несколько старомоден и очень рационален. Для тех, кто знает больше одного языка программирования — изучить новый не представляет труда. Достаточно бегло прочитать неплохие статьи на местном ресурсе.
Кстати, язык Lua чудесным образом вернул меня к воспоминаниям молодости. Лет 8 назад я загружал популярные игры из Appstore на свой Мак в виде *.ipa файлов.

Вы знаете, если *.ipa переименовать в *.zip и распаковать, то можно в 2 клика вытащить из чужого приложения все картинки и звуки. Так вот — распаковав знаменитый тогда Angry Birds, я, кроме картинок и звуков, обнаружил кучу файлов с расширением *.lua. Будучи полным невежей, я посчитал их за скриптовые файлы описания уровней игры и проигнорировал. Каково же было мое вчерашнее удивление, когда я узнал, что Angry Birds написан на языке Lua. И эти файлы — исходный код игры!

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


Любая мобильная игра состоит из 3-х действий

  1. движение *.png картинки по экрану
  2. издавание звуков-пуков при этом
  3. реакция картинки на нажатие пальцем экрана (можно палец заменить на мышку)

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

Итак, не отвлекаемся, а посмотрим, как реализуется на языке программирования каждое из 3-ех ключевых действий. Замечу, что на моем любимом Swift надо написать кода в 7 раз больше, чем на Lua.

Движение картинки по экрану


Исходный код состоит из двух строчек.

-- рисуем на экране картинку из файла, можно рисовать сразу в определенную позицию
bird = display.newImageRect( "Assets/bird_0.png", 72, 72 )

-- двигаем птичку в новую позицию за время 25 миллисекунд
transition.to( bird, { time=25, x=xNew, y=yNew } )

Издавание звуков


Исходный код состоит из двух строчек.

-- загружаем звук из файла
birdSound = audio.loadSound( "Assets/bird_shout.mp3" )

-- птичка заорала, переменная birdChannel в принципе не очень нужна
birdChannel = audio.play( birdSound )

Обработка нажатия пальцем экрана


Исходный код состоит не из двух строчек, все несколько старомоднее и длиннее.

-- регистрируем функцию в которую приходим при нажатии на экран
  addEventListener( "touch", onObjectTouch )

-- а вот и сама функция, куда приходим теперь при любом нажатии на экран
  local function onObjectTouch( event )
      if ( event.phase == "began" ) then
        selectedItem = selectCell(event.x, event.y)
        print( "Touch event on: " .. selectedItem )
      elseif ( event.phase == "moved" and selectedItem>0 ) then
            moveCell(selectedItem, event.x, event.y)
      elseif ( event.phase == "ended" ) then
        unselectCell(event.x)
      end
      return true
  end

Внутри функции код, взятый из моей первой игры, созданной при помощи Corona. На все ушло 12 дней (изучение Lua, Corona.sdk, работа с симулятором, прокрастинация и борьба с синтаксисом).

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

Идея второй игры, сделанной на Lua, примерно следующая — на поле MxN набросаны цветные кубики со значениями кратными степени двойки. 2, 4 и так далее. Любые два соседних абсолютно одинаковых кубика можно схлопнуть в один. При этом значение нового кубика удваивается. Под действием силы тяжести кубики проваливаются в образовавшуюся дыру, а сверху падают новые случайные кубики. Надо набрать максимальное число очков, пока не закончатся возможные ходы.


Рис. 1 Скриншот эмулятора с игрой

Заключение


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

Я еще не проверил, как быстро я смогу выложить игру в три магазина (Appstore, Google Play, Mac Store) — это тема для следующей статьи, обещаю рассказать не только о процессе деплоя, но и о способах монетизации игр при помощи Corona.

Возможно, разработка под Corona станет моей новой специальностью.
Мой предыдущий югославский контракт закончился 1 марта и продлевать его я не собираюсь. Устал я жить далеко от родины…
Tags:
Hubs:
+55
Comments 43
Comments Comments 43

Articles

Information

Website
coronalabs.com
Registered
Employees
11–30 employees