【问题标题】:Point in Tilt Direction - iPhone指向倾斜方向 - iPhone
【发布时间】:2011-02-26 18:23:34
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    将 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 - 调整角度

    如果 ( LR 270 + 调整角度

    我认为会做到的!希望对您有所帮助!

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

    .

    设置角度...

    “我目前唯一不确定的(关于你自己的想法)是如何将它应用到我的播放器上?我是否只是让播放器旋转值等于调整角度?”。 .嗨乔希,是的,只需将旋转设置为您使用上述计算的最终角度!幸好就是这么简单。

    如果您必须在度数和弧度之间进行前后转换,只需粘贴每个人都使用的以下代码行:

    #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

    顺便说一句,您可能会看到,您可以通过在“adjustmentAngle”表达式中简单地取原始 x 与原始 y 值的比率而不是两个正弦的比率来获得粗略的结果……但无论如何暂时不用担心。

    最后!

    重要提示 读者应注意,令人惊叹的新 Core Motion 系统可根据您的需要为您处理很多此类问题。看看吧!!!!!!

    希望对你有帮助!

    【讨论】:

    • 酷,感谢您的选择!也许你可以看看这个?从实际的瓷砖到现场开发人员,我看不到如何应用他给出的代码。如果您能解释我如何实际使用它而不仅仅是它的含义,我将永远感激不尽! paradeofrain.com/2010/07/lessons-learned-in-tilt-controls
    • 加速度计不提供角度的原始数据。如何从原始数据(通常为 -1 到 1,除非设备被强制移动)进入 -90 到 90 范围,考虑到如果您以 45 度角握住设备,原始数据将不是 0.5,而是更像 0.7
    • 抱歉,我没有尝试编写您的示例,因为我知道一旦发现链接代码将是理想的。我知道工作代码在链接页面的底部,但是我误解了它是如何应用于播放器精灵的。我将尝试您的第二个想法(我不使用 Unity),我目前唯一不确定的事情(关于您自己的想法)是如何将它应用于我的播放器?我是否只是让玩家旋转值等于adjustmentAngle?
    • 你有没有得到这个工作的代码,我遇到了完全相同的问题,任何代码都会很棒!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多