指向倾斜方向 - iPhone

时间:2011-02-26 18:23:34

标签: iphone objective-c cocos2d-iphone rotation accelerometer

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

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

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

感谢。

1 个答案:

答案 0 :(得分:12)

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

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

在屏幕上显示这两个数字,然后移动设备,这样您就可以确定自己有权利开始使用。在这有效之前,你将无法做任何事情。

solutionAngle就像一个时钟指针,顺时针方向,离你12远。

通过这个决策链:

如果LR和TA都为零,则机器是平的。采取适当的行动。

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

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

否则:

adjustmentAngle = 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;}

轴在哪里?...

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

你可能会看到BTW,你可以通过在'adjustAngle'表达式中仅采用原始x与原始y值的比率而不是两个正弦值的比率得到粗略结果......但无论如何现在不要担心。

最后!

重要读者应注意,令人惊叹的新 Core Motion 系统会根据您的需要为您处理大量此类操作。看看!!!!!

希望它有所帮助!