Qplaze-2005: Программист, будь человеком!
[ Раз уж пошёл разговор про эргономику игры… Это моя статья, написанная в далёком 2005 году для внутренних нужд Qplaze, компании, разрабатывавшей мобильные игры под Java ME. Кое-что, разумеется, устарело, но современные меню управляются не только мышью, но и клавиатурой с джойстиком — и там всё точно так же. Современные комментарии пишу курсивом в квадратных скобках. ]
Эту статью побудил меня написать такой эпизод. При проталкивании игры Real Tournament через тестеров вдруг — когда были сданы почти все «средние» телефоны — нашли ошибку где-то в системе меню. Бывает же!
Здесь я не буду говорить о логике и физике игры. Все ошибки, которые я буду упоминать, связаны с «оснасткой» игры — системой меню, сохранением и так далее. Итак, начнём!
Система меню
При нажатии кнопки «Назад» курсор должен быть на том же пункте меню, на котором был. То есть, если мы нажали на пункт «Помощь», затем на «Назад», курсор должен оставаться на пункте «Помощь». Я знаю, это подчас сложно в серьёзных «однообразных» системах меню, когда все меню, какие только можно придумать, построены на одном и том же коде. Но сделайте это как следует.
[ Переход на однообразную систему меню на некоторых мобильниках давал порядка 10% ресурсов — настолько они были тогда слабы. Я был горд, что моя система меню съедала всего 6 килобайт архива из 64 (памяти ела много, но большая её часть — заэкранный буфер, который, впрочем, и без того нужен игре с плиточной прокруткой). Я требовал, чтобы на мобильниках с таким жёстким архивом не расходовать его на что бы то ни было, что не является игрой: собирать элементы меню из игровых плиток или даже делать меню одноцветными, упрощать заставки и спрайты, и прочее. Сейчас меню — муторная, но в целом «дешёвая» часть игры, и даже если напишешь каждый экран индивидуально, мало что потеряешь. Картинки перерисованы, но оставляю раскладку экрана такой, какая была на кнопочном мобильнике. ]
То же самое следует делать в «радиоменю». Таким термином я называю меню, которые меню внешне, радиокнопки по сути. Нажимаем на пункт «Трасса», появляется список трасс. Если мы выбираем трассу — как, впрочем, и когда ничего не делаем и нажимаем «Назад» — текущим должен остаться пункт «Трасса».
И ещё одно требование к радиоменю. При входе в такое меню выделен должен быть текущий элемент. Если у нас выбрана трасса Сан-Марино, то когда входишь в меню «Трасса», выделен должен быть пункт «Сан-Марино».
Если мы прерываем игру, выделенным должен быть пункт «Продолжить».
А во всех остальных случаях выделен должен быть первый пункт меню.
И — был прецедент — если на джойстике есть центральная кнопка, обязательно используйте её.
[ Как правило, базовой моделью выбиралась Nokia Series 40 без центральной кнопки — однажды кто-то при портировании её не добавил. ]
Выход из игры должен быть быстро доступен. Желательно так. Нажимаешь правую софт-кнопку, открывается меню, выбираешь «Выход». Причём графика меню не должна загружаться; всё, что нужно для меню, должно сидеть в памяти. В противном случае игрок потянется к красной кнопке.
Помощь
В помощи должны быть освещены такие вещи:
- управление;
- правила игры (если они не понятны сразу);
- назначение бонусов и других объектов;
- дополнительные рекомендации — например, «Для лучшей видимости рекомендуем поставить контраст на максимум». Вообще-то, писать такое на всех телефонах — кощунство. Но бывают же телефоны с плохим экраном, например, Motorola T720? Старые моторолы могут присоединяться к интернету лишь тогда, когда в настройках Java прописан DNS-сервер, а доступ к интернету разрешён. И так далее.
[ Опять-таки, многое что из этого связано с ограниченными ресурсами мобильника, и сейчас надо продумывать вхождение в игру с самого начала. Впрочем… даже знаменитое видео про уровень Super Mario 1−1 говорит, что лучшие разработчики всё это делали без единого слова. ]
Сохранение
Игру нужно сохранять на всякий случай. «Всяких случаев» бывает много, игры тоже бывают разные. Я бы поделил сохранение игры на три вида.
- Сохранение по желанию. С ним просто: человек нажал «Сохранить», игра сохранилась.
- Сохранение достижений (то есть чего-то, что может только увеличиваться). Например, когда ты проходишь миссию, открывается следующая миссия. И ваше достижение — первая миссия пройдена, вторая доступна — записывается в ППЗУ. К этой же категории относится и сохранение рекордов. Здесь принцип таков: сохраняй достижения в первой же нединамичной сцене. Можно и по ходу игры, если это не будет вмешательством в игровой процесс — и если есть значок «Сохраняю».
- Автоматическое сохранение. Оно служит, чтобы игрок мог начать игру там, где прервался в прошлый раз. Это компромисс. Нам приходится сохранять игру, которую, по идее, сохранять не нужно. Сохранять игру, которую портит «сохранение где хочешь». На компьютере у игрока нет таких врагов, как Входящий Звонок, Нужная Остановка и Красная Кнопка с Закрытой Крышкой. Вот из-за этого игру и приходится сохранять. С нужной остановкой всё просто: нажимаешь «Выход», игра сохраняется. А с остальными… панацеи нет. У каждого телефона свои особенности. Вместо панацеи предложу пару советов. Во-первых, сохраняй при потере жизни и переходе на другой уровень. Во-вторых, можно сделать точки сохранения. И всё-таки в Siemens C65 в том самом Real Tournament мне пришлось сделать сохранение по желанию — из-за противной кнопки «Моё меню».
[ Имеются в виду игры аркадного толка, с перепрохождением с начала, когда «пропал». Этот жанр был по максимуму представлен на Java, хоть пробовали делать и нечто посложнее. Трудно представить, но Java-игры на мобильниках тех времён сбивались по любому чиху, в том числе по входящему звонку и закрытой крышке. В далёком 2005-м только две платформы не сбивали игру — Nokia Series 60 и моторольские «триплеты». Кстати, это стало одной из причин, почему я в своё время купил моторолу, недорогую V180. Да и кнопка отбоя звонка на последних кнопочных мобилках не красная. ]
Наконец, единственный случай, когда автосохранённая игра удаляется, — это конец игры. Во всех остальных случаях имеющийся сохранённый файл трогать не надо.
И — чем чёрт не шутит — сохраняйте настройки!
Звук
[ Текст сильно устаревший, ведь звук в кнопочном мобильнике сильно ограничен. И, по-моему, даже инди-игра сейчас может иметь нарочито плохую картинку, но звук обязан быть хорошим. ]
Первое. Выключайте все играющие звуки, и музыку заставки тоже, как только человек отключает звук. Невероятно, но факт — кто-то этого не сделал. И даже почему-то прошло через тест; обнаружилось потом, случайно.
Второе. Не делайте из игры какофонию. Звук навешивайте на те события, которые заслуживают того, чтобы их озвучили. Если телефон имеет проблемы со звуком, нещадно урезайте звуковые эффекты, пока звук не перестанет сильно мешать.
Третье. Музыку заставки — если она у вас есть — проигрывайте только один раз, когда появилось меню. Мобилка — не магнитофон, у неё качество звука из рук вон плохое. По кругу играть не стоит, музыка всё равно не длится больше 20 секунд. Раньше проигрывать музыку нельзя — можно лишь тогда, когда человек получает управление, чтобы выключить звук.
Нечего и говорить, что надо сделать опцию отключения звука. Игрок, чтобы отключить звук, не должен переводить телефон в немой режим. Желательно, чтобы это можно было сделать прямо по ходу игры.
[ Позже в моду вошёл экран, появляющийся в самом начале: включить звук или нет. Удобно: игрок может быть в людном месте без наушника, но никто не услышит лишнего. Хотя я однажды в 2010-м в поезде услышал музыку своей игры и даже попытался поговорить с ребёнком — правда, не было у затурканного школьника особых вопросов ко мне. ]
Прочее
Игры под мобильные телефоны — особенно непрофессионально написанные — любят зависать. Добавим же нашей игре профессионализма! Давайте покажем, что наша игра не висит, а думает!.. Так вот, при задержке больше секунды следует выводить символ «Подождите». При задержке более десяти секунд нужен индикатор прогресса. Постарайтесь, чтобы индикатор двигался более-менее равномерно и не был «мёртвым» более пяти секунд. (Последнее достаточно сложно, но попробуйте сделать настолько хорошо, насколько можете).
[ На быстрых компьютерах даже запинка в треть секунды — уже повод сказать «Подождите». Вообще экраны начальной загрузки у нас были болью в заднице: часто строку прогресса вручную включали и выключали в зависимости от того, быстра ли платформа. Отключали, например, на Sony Ericsson и включали на LG. И, например, было: «Что за жёлтая строка внизу экрана?» — оказалось, строка прогресса, за долю секунды дошедшая до сотни на каком-то быстром «сониэре». ]
Наконец, в инициализаторы и конструкторы ставьте только быстрые операции. Длинные операции должны выполняться, когда на экране что-то уже есть. Опять психологический эффект — вы должны всеми силами показывать, что игра живёт, а не висит. Проблемные телефоны не в счёт.
- 29 сентября 2019, 18:09
Забавно.
Ну прямо-таки "системные" руководства не знаю, но прочитать что-то из истории разработки древних мобильных игр было бы любопытно, как мне кажется
Отлично сказано.
Текст конечно разбавлен телефонами, которых в ходу уже почти нет, но советы вправду хорошие. Я бы почитал ещё.