Сопоставление наклона устройства с поведением персонажа (и т. Д.) - PullRequest
4 голосов
/ 17 апреля 2011

Контекст - это игра для iPad, в которой я хочу, чтобы экранный объект управлялся с помощью наклона устройства по оси X / Y.

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

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

Ответы [ 3 ]

3 голосов
/ 25 апреля 2011

Сначала вы захотите применить фильтр нижних частот, чтобы изолировать наклон от шума и трясущихся рук вашего пользователя. Apple показывает это в своих примерах акселерометра

x = accel.x * alpha + x * (1.0 - alpha);
y = accel.y * alpha + y * (1.0 - alpha);

больше альфа приводит к большей отзывчивости за счет более шумного ввода.

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

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

0 голосов
/ 25 апреля 2011

Посмотрите на Точка в направлении наклона - iPhone , который является первым ответом, очень полезен, я думаю.

0 голосов
/ 20 апреля 2011

Итак, мы хотим переместить нашего персонажа - назовем его «локомотив» - на основе данных x и y акселерометра.

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

Дляпример: (psuedocode)

// we'll call our accelerometer value for x 'tiltX'
// tiltX is .5; // assume that accelerometer updated the latest x value to .5
// unitOfMovement = 1; // some arbitraty increment you choose for a unit of movement

loco.x += unitOfMovement * tiltValueX;

Это приведет к тому, что loco будет перемещать это количество пикселей для каждого игрового цикла (или любого цикла, в котором вы запускаете обновления для перемещения), и здесь 1 пиксель умножается назначение акселерометра.Таким образом, если персонаж обычно перемещается на 1 пиксель вправо при полном наклоне TX (1,0), то если TiltX поступает от акселерометра со скоростью 0,5, локомотив сместится наполовину.Когда значение tiltX увеличивается, движение Loco также будет расти.

Еще один вопрос: хотите ли вы, чтобы движение было напрямую связано с частотой событий акселерометра?Вероятно, нет, поэтому вы можете использовать массив, чтобы просто хранить последние десять значений x (тоже самое для значений y), отправленных акселерометром, и использовать самое последнее среднее значение массива (сумма значений x / количество элементов в массиве) вкаждый игровой цикл.Таким образом, чувствительность будет чувствовать себя более подходящей, чем управление движением при любой частоте обновления акселерометра.

...