在我的cocos2d游戏中,我有我的玩家精灵,我想让他向我倾斜iPhone的方向移动。我可以解决这个问题,我无法解决的最难的是:
如何让我的精灵旋转指向我倾斜的方向?这在应用程序商店的“Tilt to Live”游戏中得到了很好的体现。我想要控制就像那样。
我的精灵(对于那些不熟悉cocos2d的人)确实有一个旋转值,如果有帮助的话。
感谢。
答案 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,这是您可能想要书签的非常方便的图表:
“加速度计不提供角度的原始数据。如何从原始数据中获取”
非常对,我忘了提起抱歉。这是一个日常问题......
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 系统会根据您的需要为您处理大量此类操作。看看!!!!!
希望它有所帮助!