Точка в направлении наклона - iPhone - PullRequest
13 голосов
/ 26 февраля 2011

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

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

Мой спрайт (для тех, кто не знаком с cocos2d) имеет значение поворота, если это помогает.

Спасибо.

1 Ответ

12 голосов
/ 26 февраля 2011

Если вам не нравится вышеуказанное, вот более простой способ получить разумный результат!

Держите iPad перед собой, пусть LR будет наклоном влево / вправо, ТА - в направлении к вам / от вашего наклона. Таким образом, LR работает от -90 до 90, TA от -90 до 90. (TA отрицательно склоняется к вашему животу.)

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

SolutionAngle будет как стрелка часов, по часовой стрелке, с 12 от вас.

Пройдите эту цепочку решений:

Если LR и TA равны нулю, машина находится в горизонтальном положении. Действуй соответственно.

Если LR плоское (0), ответ может быть 0 или 180, в зависимости от знака TA.

Если TA плоская (0), ответ может быть 90 или 270, в зависимости от знака LR.

В противном случае:

AdjustAngle = Арктан (sin (TA) / sin (LR))

// (Примечание: должно быть от -90 до +90)

if (LR> 0) finalResult = 90 - настройка угла

if (LR <0), finalResult = <strong>270 + настройка угла

Я думаю, что это сделает! Надеюсь, это поможет!

IMO ...... обязательно сгладьте результат с течением времени , для хорошего ощущения.

.

установка угла ...

«Единственное, в чем я не уверен в данный момент (относительно вашей собственной идеи), это как применить его к моему игроку? Привет, Джош, да, просто установите поворот на последний угол, который вы рассчитываете, используя выше! К счастью, это так просто.

Если вам когда-нибудь понадобится конвертировать назад / вперед между градусами и радианами, просто вставьте следующие строки кода, которые все используют:

#include <math.h>
static inline float degreestoradians (double degrees) {return degrees * M_PI/180;}
static inline float radianstodegrees (double degrees) {return degrees * 180/M_PI;}

.

где оси? ...

PS, вот невероятно удобная диаграмма, которую вы можете добавить в закладки:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAcceleration_Class/Reference/UIAcceleration.html

.

преобразование из акселерометра в углы ...

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

Совершенно верно, я забыл упомянуть об этом извините. Это повседневная проблема ...

distanceFactor = square root of (x^2 + y^2 + z^2)
angle X axis = acos ( x / distanceFactor )
angle y axis = acos ( y / distanceFactor )
angle z axis = acos ( z / distanceFactor) )

Вы должны ПРОВЕРИТЬ это, написав три угла на экране, а затем переместив его, другими словами «физически модульный тест» того раздела, который вы пишете, прежде чем продолжить!

вот один из многих ответов SO: UIAccelerationValue angle

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

И наконец!

ВАЖНО Читатели должны заметить, что новая удивительная система Core Motion справится с этим для вас, в зависимости от ваших потребностей. Проверьте это !!!!!

Надеюсь, это поможет!

...