Философия интерфейсов. Часть 1, удобство.
О, интерфейс, как много в этом слове для сердца кодера слилось! Как много в нем отозвалось!
Об интерфейсах ходит огромное количество статей, разговоров и книг. Но чем больше их читаешь, тем больше понимаешь, что в мире цифровом нет для этих вещей стандартов и каждый «лепит» так, как у него получается и как ему нравится. Разумеется, я не берусь писать новые стандарты, придумывать что-то новое и тем более, разрази меня Байт, изобретать велосипед. Тем не менее хотел бы рассказать несколько вещей, призванных сделать ваш интерфейс более удобным, понятным и читабельным.
В любом интерфейсе доминируют удобство и лёгкость восприятия. Визуальный эффект отходит на третий план и крайне редко способен покрыть недостатки первых двух. Согласитесь, красивый интерфейс вызывает «Вау!»-эффект, который очень быстро умирает, как только вашей программой (игрой) начинают пользоваться, если он неудобен и тяжелый в восприятии.
Что же нужно сделать чтобы интерфейс был удобным?
- Для начала надо сделать его таким, чтобы вам самим было удобно его использовать.
- Используйте привычные клавиши, комбинации для управления интерфейсом.
- Не забывайте про «горячие кнопки».
- Старайтесь дублировать любое действие.
- Не заставляйте пользователя ждать там, где это не нужно.
- Выводите только необходимую информацию, не забывая при том о пояснениях.
- Не делайте непонятных, неудобных и неочевидных элементов.
Рассмотрим пункты по отдельности:
Для начала надо сделать его таким, чтобы вам самим было удобно его использовать.
Хорошо, довольно простой пункт, я думаю. Если каждый раз рука сама тянется нажать Esc, чтобы выйти на один уровень меню повыше, но при нажатии на Esc ничего не происходит, это тот самый случай. Если список узкий и его приходится проматывать по горизонтали, это тоже он. Пользуйтесь своим интерфейсом и обращайте внимание на то, что вызывает малейший дискомфорт — первые цели для исправления. Не заставляйте пользователя делать одни и те же действия по многу раз, если можете сократить последовательность, или вовсе исключить её. Например запомните имя игрока при первом запросе в таблицу рекордов, и подставляйте дальше его автоматом. Если игрок захочет, он сменит имя, хотя куда чаще, он будет просто давить Enter.
Используйте привычные клавиши, комбинации для управления интерфейсом.
Да, как бы это странно не звучало, но этим пунктом пренебрегают очень часто. Сделали поле для ввода логина и пароля, а Enter или Tab не перебрасывает между полями ввода. Enter не заставляет кнопку Submit нажаться. Колсёсико мыши, не прокручивает список. Разумеется, есть и более сложные случаи, например выбора элементов выпадающего списка по стрелочкам курсора.
В целом этот пункт частично можно отнести к первому, но не всегда это удобно Вам, так что — отдельный пункт.
Не забывайте про «горячие кнопки».
и
Старайтесь дублировать любое действие.
Эти два пункта взаимодополняющие. Любое действие (например кнопку) всегда можно продублировать «горячей клавишей» или действием мышкой. Вспомним стратегии: можно поднести мышь к краю экрана, зажать правую кнопку и двигать мышь, нажимать курсорные стрелочки, или кликать по миникарте. И любое из этих действий делает одно и то же! Перемещает камеру. Если мы постараемся вспомнить, то найдем еще множество подобных действий. Атака. Щелчком правой кнопкой мыши на враге, нажатием кнопки «Атака» на панели управления юнитом, нажатием кнопки «А» или зажатием Ctrl.
Будь то UI для игры, или всего лишь меню. Да даже если это простенькое меню настройки для вашей игры — не забывайте дублировать действия.
Не заставляйте пользователя ждать там, где это не нужно.
О да, это знакомо всем. Не скидывается заставка или ролик? Кнопка играет анимацию, прежде чем сработать? Красиво, и первый раз нравится, но чем дальше, тем больше вызывает ярости. «Ядрёны биты, я уже всё это видел миллион раз! Хватит!» — не надо мучать пользователя и он останется благодарен вам за это. Не надо ставить простой в загрузке программы только для того, чтобы показать насколько красивая у вас панель со статусом загрузки, дайте программе грузиться столько времени, сколько ей нужно.
Выводите только необходимую информацию, не забывая при том о пояснениях.
Охохо. Этот пункт сопровождает любое сообщение об ошибке, или запросе каких-либо данных от пользователя. Пример «Ошибка по адресу 0х00FF0F31» — Что это сказало пользователю? А разработчику? Ничего, абсолютно, по крайней мере пользователю. Даже если эта ошибка неизвестна и Вы не знаете что писать, все равно не забудьте приписать чем она грозит пользователю и что ему делать при возникновении (повторном) этой ошибки. «Неизвестная ошибка. Перезапустите приложение. Возможно будут потеряны данные за последнюю сессию.» Правда понятнее? :)
Не делайте непонятных, неудобных и неочевидных элементов.
Не очевидно? Объясню. Бывает, что кнопочки располагают ну совсем не на своих местах. Например кнопку с крестиком, закрывающую окошко или программу, втыкают вниз, в левую часть окна... Короче, у кого на что хватит фантазии. Подобные ходы очень сильно путают пользователя, он тратит значительное время на поиск этого элемента, при том не только в первый раз, но и в последующие. Сюда также входит странный выбор надписей и пиктограмм. Пиктограмма, особенно без текста, должна однозначно ассоциироваться с действием. Если уж совсем туго с обозначением, всегда можно вывести подсказку (Hint).
Во всех этих пунктах можно руководствоваться опытом уже давно использующихся продуктов, таких как Windows. Если Вы пишете программу (игру) для Windows, пользователь уже приучен к элементам интерфейса этой ОС, горячим клавишам и пиктограммам. Старайтесь не изобретать малопонятных интерфейсов.
На этом я закончу свой небольшой ликбез на тему интерфейсов. Читайте, оценивайте, пишите комментарии, и я постараюсь осветить интересующие вас вопросы в будущем. Прошу прощение за отсуствие картинок, они уместны будут во второй статье про легкость восприятия.
Всем спасибо за внимание, Илья aka Darthman.
- 15 февраля 2012, 18:10
- 08
Пост на очень актуальную и важную тему! Немного конкретики не хватает, поэтому изложенные советы могут понять только те, кто уже сам мозолей натёр по аналогичным случаям. А остальным они бесполезны в силу того, что они ещё не понимают зачем это всё нужно. Поэтому в целом что-то типа мудрых афоризмов получилось - кто понял кивнул и остался с чем был, кто не понял пошел дальше и тоже умнее не стал. :)
Многочастность не поддерживаю, лучше написать одну хорошую отточенную статью, чем пять рыхлых, а шестую так и не написать.
Вот плюс миллион, нездоровая тенденция. Скоро обзоры начнут по частям писать (если кто-то вообще будет писать обзоры :)
Безусловно.
Но к примеру я, начинающий разработчик, если я хотя бы представляю, как реализовать игровую механику.(куча уроков пройдено, статей прочитано и кой какой игровой опыт есть). А вот интерфейс...мысль про интерфейс приходит неожиданно(где-то в пылу работы) и ведь самое главное, на интерфейсы других игр ты не обращаешь никакого внимания(просто они так сделаны, что поставляют тебе информацию не отвлекая внимания от изничтожения толп врагов и постройки города мечты)...
Вот автор к примеру активно нас отсылает к Windows. Опираться на ее традиции. Но я бы пошел к старшим собратьям, а именно играм более популярным, так как игровые интерфейсы уже прилично отошли в развитии, а иногда наблюдается обратная ситуация: многие программы(вру все больше сайты) уже берут приемы у игровых интерфейсов)
Ну да, всё завязано. :)
Кстати, ещё такой есть нюанс. Каждая операционная система навязывает систему правил работы с интерфейсом. После винды работать с маком очень странно - у них разные интерфейсные концепции. Что должно делать окно по двойному клику? Где должна располагаться кнопка закрытия окна? Какие комбинации горячих клавиш использовать? - решение этих вопросов зависит от контекста, а не только от Всеобщей Естественности. В играх кроме ОС контекстом ещё является жанр и более крупные предшественники. Присоединяюсь к твоему комментарию.
- не могу припомнить ни одной.
Я тоже до недавнего времени не замечал...
Я не знаю можно ли давать ссылки на другие сайты, а в общем вы конкурентами быть не можете:
http://habrahabr.ru/blogs/web_design/125862/
Ну да, это сайты.
Про программы там вроде как ничего не говорилось :)
Ну, я ж признал, что вру.)))
Хотя в свою защиту могу привести Windows Media Center, которым, как мне кажется, никто особо и не пользуется.(Там меню очень игровую напоминает, хотя как иначе).
Да и браузер Safari(там очень красиво история листается)
Макинтошевский софт, в принципе, отличается отличным интерфейсом. Хотя и не всегда интуитивно всё понятно, но на голову выше виндоуса. Факт.
Мог бы поспорить, но не имею желания :-)
Скажем так, в последних виндоусах МС исправляется очень старательно :)
Дело не в виндоусе как таковом, а в принципе управления теми или иными элементами. Вы же согласитесь, что для программ (и игр тоже) нетипично делать кнопки по примеру гиперссылок. Кнопки реагируют визуально на нажатие, а логически срабатывают только при отжатии. Если не думать о таких больших аналогиях как виндоус, то Ваши кнопки, работающие по первом нажатию будут крайне бесить пользователей, уверяю Вас.
Отлично, появились конкретные примеры)
(посидел покликал и о ужас. даже гиперссылка срабатывает по отпускаю кнопки. (эксперементы проводил). Думаю "фишка" чиста техническая и связана с обработкой событий:
"Клавиша нажата" событие которое может происходить сколько угодно времени(что может привести к многократному срабатыванию). В общем очень тяжело определить конкретные условие и время запуска, что для большого проекта вкинет приличную кучку "багов".
"Клавиша отпущена" происходит единожды.
Да и Drag'And'Drop свою лепту внес)
А в играх(в super meat boy, Shank2, а так же в Skyrim - событие срабатывает по нажатии, а не по отпускаю клавиши)
Нет, клавиша была нажата тоже единожды. Все остальное это уже удерживание.
Почему же загрузка страницы пошла только когда я отпустил ее?
В этих играх меню срабатывало сразу по моему нажатию и не обращало больше внимания на зажатую клавишу.
Ээээ. Дурной тон. Кнопки должны срабатывать на отпускание, на случай если пользователь случайно нажал - можно увести курсор мыши в сторону и там уже отпустить.
Не сочтите за дурной тон.
Однако в части игр портируемых с консолей(или туда портируемых, а это приличный пласт) никто не смотрит на отсутствие огреха и он никого не раздражает. (а мне даже кажется что меню "шустра откликаются" на мои действия, ведь нажатие клавиши, происходит на долю секунды раньше чем ее отпускает, эфект такой психологический.
вот тут и начинаются нюансы(разберем пример):
Скайрим обычно задает вопросы перед каким-либо действием, которое повлечет долгое ожидание(и по умолчанию выбрано "Нет").
Так же меню помнят выбор, на случай если я ошибся и случайно проделав длинный путь выпадающих менюшек выбрал не то оружие или квест.
ЗЫ: Виндовс версии сохраняют такое поведение, в основном.
Дурной тон не у Вас, а у разработчиков, которые ставят срабатывание кнопки на нажатие клавиши мыши, а не на отпускание. И геймпад всё-таки от мышки довольно сильно отличается.