Pull to refresh

J-Bird

Development for iOSDevelopment of mobile applicationsGame development
Весна навалилась на Крагуевац и нет покоя от котов и птиц. Птицы, скажете вы, при чем здесь птицы, и потянетесь к магической стреле. Стойте, я объясню…


Последний год iOS-игрушки перестали приносить деньги. Вообще, я обнаружил закон PapaBubaDiop -а: Каждые 2 года доходы от старых iOS игр уменьшаются ровно вдвое. В 11 году я получал $200 в день, в 2013 — $100, в 2015 — $50. В грядущем году революции все говорит о том, что дебет будет $25 в сутки. Грустно, девушки, все вернулось в началу 2000, когда инди-парни получали эмоциональное удовлетворение от разработки и более ничего не получали. Хочу заметить, что дело не только в том, что большие дяди кушают торт без нас. В целом очень повысилось качество приложений и безыскусные поделки не имеют никаких шансов даже на 5-10 бесплатных скачиваний.

Это не значит, что ваше добротно сделанное инди-приложение не принесет денег. Принесет, но не более того, что получает php-разработчик в российской глубинке.
Для проверки своего тезиса, что халява закончилась и разработка игры превратилось в простое ремесло я провел эксперимент.

Суть:

  1. разработать игру за 1 день.
  2. Проследить — сколько она заработает за месяц.
  3. Проинтерполировать на год, жизнь и один день.
  4. Сравнить с посуточной зарплатой js-кодера из Моршанска.
  5. Угостить всех девушек Хабра шампанским.

Нормальный план.

Погнали разработку


Здесь чуть-чуть учебника. Идеи приложений приходят из вашего прошлого, один из способов — взять свою любимую игру детства, модифицировать гейм-плей (вспомни! тебе не хватало именно такой фичи в оригинальной забаве?). Затем проверить идею вручную, без программирования и вот уже начать кодировать.

Идея


В моем случае это древняя DOS игра j-bird — в ней птичка должна обойти все клетки гексагонального поля. После посещения клетка метится другим цветом. Мне всегда хотелось, чтобы птица не просто обходила всю доску, а чтобы цвет клетки доски инверсивно менялся после каждого посещения, чего не было в оригинальной версии игры.

Видео геймплея очень длинное 500 секунд, не мог оторваться пока не погиб


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

Дизайн


Самому делать дизайн — в день не уложишься. Я купил набор картинок на envato.market. $6. Потом вычтем из дохода.

Изометрический сет стоит несколько дороже, чем я обычно плачу, а именно $15. Расплачиваясь через Paypal, система накидывает еще $1 за услуги. Но маркет подарил мне сертификат на $10, потому фактические затраты = $6.
Поскольку лицензия на картинки всегда мутная, то с художниками я проворачиваю следующий трюк. Благодарю его за прекрасный set и прошу за дополнительные деньги дорисовать пару картинок. Художники (хорошие) — всегда заняты и вежливо отказываются, но при этом чувствуют себя неловко. Тут надо брать их тепленькими. Посылаю ссылку на приложение с авторским дизайном, говорю: — Вот, что получилось, хочу игру в магазин выложить. Как считаешь?
Они с восторгом отвечают: — Конечно, дорогой, пользуйся, выкладывай (только отстань), успехов в продвижении и всех благ!

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

Звуки


Звуки вытаскиваю из игр. Скачиваем (на десктопе!!) в iTunes бесплатную игру Angry Birds 1.7.0, open in Finder, переименовываем расширение ipa в zip — разархивируем — далее директория Payload — далее щелкаем правой кнопкой на файле AngryBirdsClassicLight.app — выбираем в меню Show Package Contents. Все, вы в домике! — 100 звуковых файлов в вашем распоряжении.

Прим. переводчика — в последнее время многие пользуются Unity и пакуют ресурсы в assets. В этом случае вы в пролете, звуки запакованы. С распаковкой я не работаю, это к Шалтаю.

Swift


Настолько прекрасен 3.0, что сам процесс кодирования занимает пару часов. Суть программирования — создать UIViewController, присобачить к нему картинки в виде UIImageView объектов, например:

  @IBOutlet weak var bird: UIImageView!
 


И простой функцией
bird.center = CGPoint(x:xBird, y:yBird) 
 

перемещать птичку в нужную точку экрана.

На самом деле прыжок птицы — это парабола. Нам надо переместить её из точки (xbird,ybird) в точку (xcell, ycell). Параболу заменяем без потери качества на две прямые, подобно тому как мы меняем котангенс на функцию Хевисайда в нейронных сетях. Программно траектория птицы разбивается на два линейных участка

bird.center = CGPoint(x:xCell, y:yCell+heightOfBird) 
bird.center = CGPoint(x:xCell, y:yCell) 
 


Для анимации каждое движение оборачиваем блоком UIView.animate
      UIView.animate(withDuration: 0.15, delay: 0.0, options: .curveEaseOut, animations: {
            self.bird.isHighlighted = xBird>xCell ? true : false
            self.bird.center = CGPoint(x: xCell, y: yCell-heightBird)
        },
                       completion: {finished in
                        if self.pause==0 {
                            self.shift()
                        }
                        UIView.animate(withDuration: 0.35, delay: 0.0, usingSpringWithDamping: 0.25, initialSpringVelocity: 0.0, options: .curveEaseOut, animations: {
                            self.bird.transform = .identity
                            self.bird.center = CGPoint(x: xCell, y: yCell)
                        },
                                       completion: {finished in
                        })
        })
    


Регулярная сетка 6 на 6 сродни матрице 6 на 6 с нулями выше диагонали. Проблему с тремя цветами, когда расклад не сходится (остается одна клетка) я решил просто. В этом случае позволяю птичке прыгнуть на месте. Все.

Монетизация


Подробно про схему монетизации и цифры дохода поведаю во второй части статьи, ровно через месяц 8 марта. Сейчас кратко — в игре использую рекламу от AdMob (ма-а-а-ленький баннер внизу) и ChartBoost (статичное межстраничное объявление), а также встроенные покупки. За $1 доллар докупить 100 жизней, за $2 доллара — 666. Реклама включается, когда игрок первый раз погиб.

Но. Сейчас игра в магазине находится в 1-долларовом состоянии. По двум причинам.
Первое, чтобы её заметили, она должна пару недель побыть платной. Затем Sales — в новом бесплатном состоянии при удачном раскладе её начнут качать, возможно более 500 раз за день.

Релиз


Игра закончена и выложена в маркет. Кстати, сейчас чертовски благоприятное время для одобрения приложений — обычно 1-2 недельный процесс в январе-феврале занимает менее суток!
Торопитесь. Скоро начнутся бешеные мартовские гонки. Высокий сезон, все такое… E3 в ЛА. А я там, похвастаюсь, бывал. E3 — это такая игровая выставка. Маечки, ручечки, ну вы понимаете.

Продолжение следует…
Tags:j-birdenvatoin-app purchases
Hubs: Development for iOS Development of mobile applications Game development
Total votes 44: ↑37 and ↓7 +30
Views14.3K

Popular right now

Game Design
July 15, 202160,500 ₽XYZ School
Game Code
August 15, 202160,500 ₽XYZ School
Node.js: серверный JavaScript
June 28, 202127,000 ₽Loftschool
Основы вёрстки сайтов
June 28, 202120,000 ₽Loftschool
Веб-дизайнер
June 28, 202183,000 ₽GeekBrains