2012-02-14 11 views
0

私はOpenGLを使ってiPhoneゲームを作っています。私は、ゲームコントロールのインターフェースを書くときに問題に遭遇しました。私は4つのボタン(左、右、攻撃、ジャンプ)を持っており、私は同時に押すことができる必要があります。私が必要とするのは、Stationaryをtouchesする関数のようなものです(touchesBegin、MovedおよびEndのみがあります)。私は現在画面上のすべての指を返す関数が必要です(現在の段階に関係ありません)。しかし、それらの関数は、私が指を動かすとき、または指を持ち上げたときに、押すだけで戻ります。指が所定の位置に留まっているときにボタンを押す機能です。iPhoneでマルチタッチを扱う

touchesBegin、touchesMovedおよびtouchesEndを使用してコードを書き込もうとしましたが、ある関数は他のものとは異なる順序で指リストを返します。したがって、すべてをねじ込み、マルチタッチが不可能になります。

理想的な機能は、現在画面上のすべての指を戻してから、すべてを繰り返し、位置があるボタンの位置と一致するかどうかを確認してから、そのボタンをアクティブにできます。それをどうすれば実現できますか?

答えて

0

あなたは基本的に、タッチベースのGUI機能の重要なチャンクを実装することを話しています。あなたは、各ボタンで何が起こっているのかを追跡する小さなステートマシンを実装する必要があります。例えば、ボタンは「押されていない」状態から始まります。ボタン内のタッチを検出すると、そのボタンは「押された」状態に移行します。タッチが移動する(または終了する、またはキャンセルされる)場合、ボタンにまだタッチが含まれているかどうかを確認します。表示されていない場合は、「押されていない」状態に戻ります。ゲームループは、ボタンの状態をチェックし、それに応じてイベントを生成することができます(たとえば、押された場合はイベントを連続的に生成する必要があり、解放された場合はワンショットイベントを生成するボタンがあります)。

+0

しかし問題は、「ボタンにまだ接触があるかどうかを確認する」という部分です。どうやってやるの?私はそれのための機能を見つけることができませんでした。私は触れ始める、移動する、または終了するときだけイベントを受け取ります。ユーザーが移動せずにボタンを保持している場合、気づかれることはありません。それが私が必要とするもので、ある位置に接触があるかどうかを確認するためです。 – HLorenzi

+0

ボタンの中にタッチがあった場合(touchesBegan/Movedコールの結果として検出された)、以来タッチを受けていない場合移動中/終了/キャンセル:タッチがないことを示すコールボタンの内側に。タッチイベント間の現在の状態についてボタンに問い合わせることができるように、ボタンごとに1つの追加の値(おそらく 'isPressed'というブール値)を格納する必要があります。ボタンの状態を保存することで、タッチのコールバックに依存しない永続的な情報が得られます。 – warrenm

+0

はい、すべてのボタンにisPressedを保存​​しています。しかし、問題はマルチタッチ機能のために発生します。私はいくつかのtouchesMovedイベントがいくつかのtouchesBeginイベントの同じ指であるかどうかを追跡することができません。例えば、ユーザーが画面上で指を動かしたかどうかを知る方法はありません。 - このシナリオでは触れられていなかったため、移動した指が最初のボタンを押したのと同じであるかどうかを知る方法はありません(私はそれを解くことができます)。説明するのは少し難しいです... – HLorenzi

関連する問題