如何使我的精灵旋转以指向我倾斜的方向?这在应用商店上的“Tilt to Live”游戏中非常好地表示。我想要完全像那样的控件。
我的精灵(对于不熟悉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) )
// (NB, that should run from -90 to +90)
if ( LR > 0 ) finalResult = 90 - adjustmentAngle
if ( 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;}
.
顺便提一下,这是一张非常方便的图示,你可能想要收藏起来: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值的比率而不是两个正弦函数的比率(在“adjustmentAngle”表达式中)来获得粗略结果...但是现在不用担心这个。
重要提示:读者应注意,令人惊叹的新Core Motion系统可以根据您的需求处理很多问题。赶快去看看吧!
希望对您有所帮助!