【问题标题】:Handling Multitouch on iPhone在 iPhone 上处理多点触控
【发布时间】:2012-02-15 03:25:32
【问题描述】:

我正在使用 OpenGL 制作 iPhone 游戏。当我开始编写游戏控件的界面时,我遇到了一个问题。我有四个按钮(左、右、攻击、跳跃),我需要能够同时按下和。我需要的就像一个函数 touchesStationary(只有 touchesBegin、Moved 和 End)。我需要一个返回当前屏幕上所有手指的函数(与它们当前的阶段无关),但这些函数仅在我开始按下、移动手指或抬起手指时返回......没有当手指停留在原位时按下按钮的功能。

我尝试使用 touchesBegin、touchesMoved 和 touchesEnd 编写代码,但一个函数返回的手指列表与其他函数的顺序不同,因此它搞砸了一切,多点触控变得不可能。

理想的函数会返回当前屏幕上的所有手指,然后我可以遍历所有手指,检查它们的位置是否与某个按钮的位置匹配,然后激活该按钮。我怎样才能做到这一点?

【问题讨论】:

    标签: ios opengl-es input multi-touch


    【解决方案1】:

    您基本上是在谈论实现大量基于触摸的 GUI 功能,以及带来的所有复杂性。您将不得不实现一个小型状态机来跟踪每个按钮的情况。例如,一个按钮以“未按下”状态开始。如果您检测到按钮内的触摸,它会转换到“按下”状态。当触摸移动(或结束,或被取消)时,您检查按钮是否仍然包含触摸。如果没有,则转换回“未按下”状态。您的游戏循环可以检查按钮的状态并相应地生成事件(例如,某些按钮可能需要在按下时连续生成事件,而其他按钮在释放时生成单次事件)。

    【讨论】:

    • 但问题在于“检查按钮是否仍然包含触摸”部分。我怎样才能做到这一点?我找不到它的任何功能。我只在触摸开始、移动或结束时收到事件。如果用户按住按钮不动,它就不会被注意到。这就是我需要的,检查某个位置是否有触摸。
    • 如果按钮内部有触摸(由于 touchesBegan/Moved 调用而被检测到),并且此后您没有收到任何 touchesMoved/Ended/Canceled,则按钮内部有触摸:调用表示按钮内部没有触摸。您必须为每个按钮存储一个附加值(可能是一个名为isPressed 的布尔值),以便您可以查询按钮在触摸事件之间的当前状态。通过存储按钮状态,您可以获得不依赖于触摸回调的持久信息。
    • 是的,我正在为每个按钮存储 isPressed。但是由于多点触控功能而出现问题。我无法跟踪某些 touchesMoved 事件是否与某些 touchesBegin 事件的手指相同,因此,例如,如果没有我松开第一个按钮,就无法知道用户是否将手指移过屏幕并停在第二个按钮上- 因为在这种情况下没有 touchesEnded,并且无法知道移动的手指是否与按下第一个按钮的手指相同(所以我可以松开它)。有点难以解释……
    猜你喜欢
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多