Как я могу сделать удобное для пользователя движение полярных координат по кругу?

23

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

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

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

Я использую клавиши A и D для перемещения против часовой стрелки и по часовой стрелке, соответственно. Проблема в том, что если вы находитесь на «вершине» планеты (верхняя половина), это имеет смысл: A перемещается влево, D перемещается вправо. Однако, если вы находитесь на «дне» планеты (нижняя половина), A перемещается вправо, а D перемещается влево.

Любые идеи о том, как я могу сделать это более удобным для пользователя?

MCMastery
источник
21
Вы спрашивали пользователей, находят ли они это непонятным? Я, конечно, нет - вы нажимаете вправо, чтобы переместить вашего персонажа вправо и влево, чтобы переместить вашего персонажа влево с точки зрения вашего персонажа . Это гораздо лучше, чем, скажем, менять кнопки в середине поворота (если вы планировали это сделать).
Charanor

Ответы:

38

Моим первым предложением было бы просто придерживаться A= против часовой стрелки и D= по часовой стрелке движения. Это не очень запутанно и в значительной степени является «стандартным» (то есть наиболее распространенным) выбором, когда речь идет о таком орбитальном движении.

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

только верхняя половина планеты

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

кратчайшее направление для клика

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

Charanor
источник
3
Если вы работаете с движением камеры, я советую немного отстать, если вы хотите подчеркнуть направление движения и скорость. ваш персонаж будет казаться наклоненным на 5 или 10 градусов в направлении движения.
satibel
16

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

ricksmt
источник
3
Это может стать очень дезориентирующим, если вы не будете осторожны.
Beefster
11

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

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


источник
6
Находясь справа от круга, S должен двигаться по часовой стрелке.
user253751
1
Я не думал об этом, потому что OP упомянул только две клавиши, но это хорошая идея.
1
Также важно рассмотреть аналоговые ручки управления, где эта модель управления чувствует себя лучше всего.
Beefster
10

Я предлагаю вам взглянуть на похожую концепцию, но потом в 3D: Super Mario Galaxy.

скриншот супер Марио галактики https://youtu.be/_8eJC4gIAm4?t=19m

При коротких движениях система отсчета остается неизменной, вселенная не движется, выходя за определенный порог, по которому вселенная движется / сдвигается, поэтому система отсчета возвращается в середину.

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

Я предполагаю, что Nintendo приложила немало исследований, чтобы сделать игру максимально плавной, и на этом они остановились. Мне всегда нравится смотреть на то, что выяснили крупные компании, надеясь, что они вложили что-то в НИОКР для максимального комфорта и удобства игры.

Tschallacka
источник
7

Используйте A/ Dдля перемещения персонажа в направлении к крайней левой / правой точке планеты, соответственно, и W/ Sдля перемещения персонажа к самой верхней / самой нижней точке.

Таким образом, игрок всегда перемещает персонажа в том же направлении, что и входное движение - например, Dвсегда движется вправо, Sвсегда движется вниз, независимо от положения персонажа.

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

Кроме того, круглая W- A- S- Dили W- D- S- Aкартина результатов ввода в кругосветных планетах, которая кажется довольно интуитивно.

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

AlliedEnvy
источник
1
Это то, что я собирался предложить после игры в Super Mario Odyssey . Однако из-за смены схем управления поначалу это было не совсем понятно. Если это ваша основная схема управления, возможно, это не будет проблемой
Kaiged
3

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

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

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

Ваш вопрос точно такая же дилемма; проблема «ментальной модели» заключается в том, означает ли нажатие вправо на ручку управления «двигаться вправо персонажа» (как в Resident Evil) или «двигаться в направлении правой стороны экрана» (как в Mario). Или в этом случае «двигаться по часовой стрелке» (как в Tempest, когда используется традиционное преобразование из весла в джойстик).

У каждого игрока будет встроенная модель, к которой он привык, которую он не хочет менять (или с трудом меняет). В любой такой проблеме «ментальной модели» у вас есть три варианта решения этой проблемы:

  1. Как разработчик, вы выбираете, какая модель является лучшей для вашей игры, и используете ее. Игнорировать жалобы людей, которые имеют проблемы с выбранной вами моделью; им просто придется адаптироваться. И если ваша игра достаточно убедительна, они будут.
  2. Реализуйте обе возможные модели и позвольте игрокам выбирать, какую из них они хотят использовать.
  3. Перепроектируйте игру, чтобы убедиться, что отображение элементов управления -> игровых действий остается неизменным, независимо от того, какую ментальную модель кто-то использует.

Вариант 3 («изменить дизайн игры, чтобы ментальные модели не конфликтовали друг с другом») в этом случае означал бы вращение камеры вместе с игроком, поэтому игрок всегда отображается в вертикальном положении на экране. Таким образом, «право означает движение по часовой стрелке», а «право означает движение к правой стороне экрана» всегда на одной линии; конфликта больше нет, и игроки не будут сбиты с толку в зависимости от их ментальной модели того, как контроль должен работать.

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

Любой выбор здесь действителен; разные варианты просто требуют разного объема работы и накладывают разные ограничения на вашу игру. Если для вас действительно важно, чтобы игрок был видимым, перемещаясь по «нижней» стороне планеты, по тематическим или художественным причинам, то вы не захотите использовать вариант 3 и должны использовать 1 или 2. Если нет, тогда вариант 3, вероятно, является идеальным выбором.

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

Эту технику часто называют «блокировкой» управления джойстиком, и она обычно используется в 3D-играх, когда камера делает внезапный поворот (что не заставляет игрока внезапно менять направление), но также может быть полезна здесь в 2D-игра, если движение камеры в противном случае приводило бы к тому, что неизмененные входные данные игрока внезапно означали нечто иное, чем раньше.

Тревор Пауэлл
источник
1
Провести двумя пальцами вниз по сенсорной панели моего ноутбука прокрутку вверх или вниз? Если бы я был на мобильном устройстве, он был бы вверх (потому что мои пальцы и страница «соединены»), но в том же направлении на мыши было бы вниз ... Я чувствую это отключение каждый раз, когда я использую Mac ...
Draco18s
@ Draco18s Это еще один отличный пример! Windows считает, что ввод с прокруткой вниз означает смотреть в документе дальше вниз, в то время как Apple считает, что ввод с прокруткой вниз означает перемещение самого документа вниз (что означает, что мы видим больше в верхней части документа). Но в настольных ОС Apple знала, что у многих людей была другая ментальная модель работы прокрутки, поэтому они реализовали и то, и другое, и каждый пользователь мог выбирать, что ему по душе. ,
Тревор Пауэлл
Да, вы можете изменить его, я просто знаю так много людей, которые настроили его по умолчанию («переместить документ вниз»). Черт возьми, ноутбук с Windows, который я получил на работу месяц назад, имел это по умолчанию. Я быстро выключил его (вместо этого я включил функцию «прокрутки по краям», но думаю, что выключу ее снова, потому что она слишком медленная: серьезно, прокручивается вся высота области прокрутки… пять строк). ...)
Draco18s
2

Используйте W / S / A / D для ввода (или вверх / вниз / влево / вправо). Относитесь к вводу как к 8 направлениям (включая диагонали).

Затем переместите проигрыватель в любом допустимом направлении (по часовой стрелке или против часовой стрелки) ближе всего к тому направлению, которое было нажато.

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

Один из вариантов вместо определения связи между ключом и направлением движения:

  • одна клавиша для перемещения «вперед» (в текущем направлении выбора)
  • одна клавиша для «поворота» (переключение направления)

Для этого персонаж должен иметь четко видимое «направление».

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

jcaron
источник
1

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

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

Philipp
источник
1

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

Дайте персонажу видные различимые направления

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

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

Пока вы двигаете своего персонажа, легко поддерживать ориентацию, в которой находятся ваши элементы управления. В конце концов, продолжение движения в направлении, в котором вы двигаетесь, вообще не предпринимает никаких действий, и когда вы хотите изменить свое движение. есть только один другой ключ на выбор. Только когда вы снова начинаете двигаться после остановки, перед вами стоит выбор. Чем дольше вы делаете паузу, тем труднее будет снова поднять трубку, основываясь на том, что вы делали раньше. Уменьшая частоту пауз и длительности пауз, вы можете не дать игрокам забыть, как двигаться.

Чародейская волчанка
источник
0

Есть несколько подходов к этому.

1) Как бы я подошел к этому, понадобятся участки планеты: верхняя, левая, правая и нижняя стороны (больше, если желательно). И сделайте так, чтобы после нажатия пользователем направления персонаж продолжал двигаться в этом направлении, пока не отпустит эту кнопку. Таким образом, если персонаж находится слева и пользователь нажимает клавишу вверх, персонаж будет двигаться по часовой стрелке до освобождения. Таким образом, вам не нужно беспокоиться об изменениях в системе координат во время движения персонажа, только после.

2) По-другому хотелось бы, как к нему подходят «Влюбленные в опасном пространстве-времени». С помощью джойстика вместо того, чтобы иметь систему координат, зависящую от поверхности, они имеют его таким образом, чтобы угол наклона джойстика был желаемым местом для «персонажа», на котором можно было остановиться. Таким образом, их система координат была в центре их "планеты". Я говорю персонаж и планета, но у них были модульные части корабля снаружи, где вы определяете, куда они идут, то есть, в каком направлении двигатели указывают на движение корабля.

3) Как у вас это разработано сейчас. Это тоже может немного освоиться, но игроки ничего не видели раньше. Вы можете отредактировать его так, чтобы планета вращалась, а игра всегда была «сверху».

Code Eyez
источник