指向倾斜方向 - iPhone

Jos*_*ane 13 iphone objective-c rotation accelerometer cocos2d-iphone

在我的cocos2d游戏中,我有我的玩家精灵,我希望让他朝我倾斜iPhone的方向移动.我可以解决这个问题,我无法解决的最困难的是:

如何让我的精灵旋转指向我倾斜的方向?这在应用程序商店的"Tilt to Live"游戏中得到了很好的体现.我想要像这样的控件.

我的精灵(对于那些不熟悉cocos2d的人)确实有旋转值,如果有帮助的话.

谢谢.

Fat*_*tie 12

如果您不喜欢上述内容,这里有一个更简单的方法来获得合理的结果!

将iPad放在你面前,让LR左/右倾斜,TA朝你/远离你倾斜.所以LR从-90到90,TA从-90到90.(TA负向你的腹部倾斜.)

在屏幕上显示这些数字,然后移动设备,这样您就可以确定自己有权利开始使用.在此工作之前,您将无法执行任何操作.

解决方案角度就像时钟指针,顺时针方向,距离你12远.

通过这个决策链:

如果LR和TA均为零,则机器是平的.行动恰当.

如果LR是平坦的(0),则答案为0或180,具体取决于TA的符号.

如果TA为平坦(0),则答案为90或270,具体取决于LR的符号.

除此以外:

adjustAngle = arctan(sin(TA)/ sin(LR))

//(注意,应该从-90到+90)

if(LR> 0)finalResult = 90 - adjustmentAngle

if(LR <0),finalResult = 270 + adjustmentAngle

我想会做到的!希望能帮助到你!

IMO ...... 一定要随着时间的推移平滑结果,以获得良好的感觉.

.

设置角度......

"我目前唯一不确定的事情(关于你自己的想法)是如何将它应用到我的玩家?我只是让玩家的旋转值等于adjustAngle吗?" ..嗨Josh,是的,只需将旋转设置为您使用上面计算的最终角度!幸运的是,就这么简单.

如果你必须在度和弧度之间转换前/后,只需粘贴每个人使用的这些代码行:

#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;}
Run Code Online (Sandbox Code Playgroud)

.

轴在哪里?...

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) )
Run Code Online (Sandbox Code Playgroud)

您必须通过在屏幕上写下三个角度,然后移动它来测试这个,换句话说,在您继续之前,对您编写的部分进行"物理单元测试"!

这是SO的许多答案之一:UIAccelerationValue角度

顺便说一句,你可以看到,你可以通过在'adjustAngle'表达式中仅采用原始x与原始y值的比率而不是两个正弦值的比率来获得粗略结果......但无论如何不要现在担心这一点.

最后!

重要事项读者应注意,令人惊叹的全新Core Motion系统可根据您的需求为您处理大量此类操作.看看这个!!!!!

希望能帮助到你!