Редактор Игры Для Платформера - Postmortem

Около 2,5 лет назад мы задумали простой проект — платформер с определёнными свойствами: хардкорный, предельно динамичный, без стрельбы.

Платформа — iOS, поскольку мы работаем только с ней — а Android на тот момент еще не был серьезной альтернативой.

В качестве стандарта был выбран Super Meat Boy, который на тот момент еще не был выпущен.

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



Редактор игры для платформера - postmortem



Так начинается история

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

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

Главное, что базовый прототип нам настолько понравился, что мы решили «добавить фичи».

А потом оказалось, что создание уровней заняло в 10 раз больше времени, чем мы думали априори, и проект незаметно превратился в самый амбициозный долгострой, который когда-либо выходил из нашей скромной команды (нас двое — программист) и художник) - на игру ушло не мало двух лет. За это время игра немного изменилась:

Редактор игры для платформера - postmortem



Знакомьтесь с редактором

Итак, редактор.

Идея сделать редактор уровней прямо на iPad пришла мне в голову по двум причинам.

Во-первых, мой «движок» не поддерживает другие платформы, кроме iOS. То есть, чтобы сделать редактор на ПК, вам пришлось бы либо портировать весь «движок» и всю игру – чего мне не хотелось, либо писать редактор отдельно от игры, без возможности играть сразу - чего я тоже не хотел.

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

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



Редактор игры для платформера - postmortem



Он сказал – поехали!

Первую версию редактора я сделал довольно быстро – за несколько дней.

История не сохранила свой внешний вид, но от нынешнего он практически ничем не отличается — редактор для внутреннего пользования, и какой смысл делать красивые вещи, которые игрок не увидит? Финальный вариант с открытым дополнительным меню выглядит так:

Редактор игры для платформера - postmortem

Идеология была проста — все начиналось с объекта под номером ноль, который добавлялся специальной кнопкой.

После этого клонирование происходило до победного конца — новых объектов больше не добавлялось.

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

Несмотря на примитивизм, схема работала хорошо.

Забавно, но индекс спрайта 2 года мы подбирали «на ощупь» — с помощью ползунка, в котором просто пролистывали все спрайты подряд:

Редактор игры для платформера - postmortem

Казалось бы, это ужасно неудобно.

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

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



Редактор игры для платформера - postmortem



Что (еще) пошло правильно

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

Итак, выводы:

  1. Одной из первых закодированных вещей была следующая вещь — возможность дублировать текущий объект в любом из четырёх направлений.

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

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

    Была даже пятая подобная кнопка — она копировала объект без сохранения параметров, устанавливая значения по умолчанию.

    Эта «фича» обеспечила удобный способ расположения повторяющихся объектов, в частности, тайлов.

  2. Вторым удобным моментом стала возможность удалять объекты простым тапом в определенном углу экрана – в нашем случае в левом верхнем углу.

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

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

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

  3. Дважды нажмите, чтобы перейти в режим выбора объекта(ов); при отпускании объект фиксировался и редактор переходил в режим перемещения, который завершался либо повторным двойным тапом, либо переходом в режим перемещения по карте.

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

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

За деревьями не видно леса, проект не хотел заканчиваться, и мы попали в тот самый вечный цикл, знакомый по статье про Старкрафт — игра всегда была «за месяц до релиза».

А поскольку до релиза оставался «месяц», мне не хотелось тратить время на улучшение редактора, которое стоило бы десятков, сотен потраченных впустую часов.



Что пошло не так, очень-очень неправильно.

  1. Отменить.

    В редакторе по-прежнему нет функции отмены.

    Почти нет — возвращается одна операция хода и всё.

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

    И изначально отсутствие Undo компенсировалось количеством недостатков 2, о котором речь пойдет ниже.

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

    Или удалить случайно продублированные «по» дюжине объектов.

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

  2. Массовое распределение.

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

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

    Фактически это привело к тому, что до финального этапа в игре не было копирования/вставки, а это значит, что каждый из примерно 50 000 объектов в игре вручную размещался в своей уникальной точке – за исключением тех случаев, когда они были скопированы в соседнюю ячейку с использованием тех же команд дублирования.

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

    Но минусом является явный перерасход времени, причем во много раз.

  3. Анимация объектов.

    Все параметры настраивались с помощью ползунков, хотя некоторые «помощники» все же были.

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

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

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

  4. Точность.

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

    Для «решения» этой проблемы были реализованы две вещи — привязка к сетке и невозможность переместить объект на нечетный пиксель (то есть, по сути, сетку с размером ячейки = 2).

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

    самой сеткой — и в результате приходилось либо фиксировать положение объектов на сетке «руками», либо «забивать» на сетку и играть в веселую игру «попасть пальцем в пиксель по обеим координатам в всего лишь в 15-й раз».

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

  5. Горячие клавиши.

    Оказалось, что наиболее распространенными операциями являются: — вращение объекта — изменить ориентацию (перевернуть) по осям x и y - отключить коллизии — изменить zIndex (порядок рендеринга, заданный вручную) Им требовалось от одного до трех нажатий.

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

    Для решения этой проблемы было решено «прикрутить» внешнюю клавиатуру.

    Был куплен переходник для USB-клавиатуры (в лучших традициях Штирлица, называемый Camera Connection Kit), и было проведено несколько бесцельных ночей, пытаясь заставить его работать.

    Получилось с помощью «хака» — невидимой текстовой формы размером в 1 пиксель.

    А потом оказалось, что работать с iPad и внешней клавиатурой одновременно неудобно.

    Нужна третья рука — одна держит устройство, другая манипулирует предметами, третья нажимает кнопки.

    «Особенность» осталась невостребованной.

  6. Интерфейс в целом.

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

    На данный момент, запуская новый редактор с нуля, я бы в первую очередь позаботился о следующем:

    • Удобное выпадающее меню для выбора команд выпуска.

    • Панели, выскакивающие из-за экрана при свайпе, аналогично тому, как вызывается панель «Уведомления» в iOS.
    • Циклическая прокрутка набора кнопок — чтобы вы могли выбрать нужные вам операции прямо сейчас, и таким образом разместить больше команд «быстрого доступа».

    • Мультитач для общих команд, таких как переворот, поворот, масштабирование, масштабирование.

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



В конце концов.

В конце концов мы выпустили игру, и всё закончилось хорошо.

Ну почти — продажи пока не совсем наладились, но мы над этим работаем.

Пока мы можем лишь скромно похвастаться невероятно высоким средним рейтингом в Google Play — 4,9 единицы, то есть тем, что игра людям не нравится, но нравится очень и очень.

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



Редактор игры для платформера - postmortem

Теги: #iOS #разработка игр #программирование #разработка игр

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.