在我的 cocos2d 游戏中,我有我的玩家 Sprite ,我想让他朝我倾斜 iPhone 的方向移动。我可以解决这个问题,我无法解决的最难的部分是:
如何让 Sprite 旋转指向我倾斜的方向?这在应用程序商店的“Tilt to Live”游戏中得到了很好的体现。我想要那样的控件。
如果有帮助的话,我的 Sprite (对于那些不熟悉 cocos2d 的人)确实有一个旋转值。
谢谢。
最佳答案
如果您不喜欢上面的内容,这里有一个更简单的方法来获得合理的结果!
将 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
如果 ( LR < 0 ), finalResult = 270 + adjustmentAngle
我想这样就可以了!希望对您有所帮助!
IMO ......一定要随着时间的推移平滑结果,以获得良好的感觉。
.
设置角度...
“我目前唯一不确定的(关于你自己的想法)是我如何将它应用到我的播放器上?我是否只是让播放器旋转值等于 adjustmentAngle?”。 . 嗨,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
顺便说一句,您可能会看到,在“adjustmentAngle”表达式中,您可以通过简单地获取原始 x 值与原始 y 值的比率而不是两个正弦值的比率来获得粗略的结果……但无论如何暂时不用担心。
最后!
重要 读者应该注意到,惊人的新 Core Motion 系统可以根据您的需要为您处理很多这样的事情。检查一下!!!!!!
希望对您有所帮助!
关于iphone - 指向倾斜方向 - iPhone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5128861/