0

AppDelegate でマルチタッチを有効にしました。私のゲーム シーン InputLayer では、いくつかの CCMenuItemSprite をボタンとして使用し、SneakyJostic をコントローラーとして使用する CCMenu を追加しました。私の入力レイヤーでは、CCMenu と SneakyJoystic コントローラーの外部で一部のユーザー タッチを評価できるようにするため、この方法で "Standard Touch Delegate" プロトコルに準拠してタッチを有効にしました。

ユーザーの指の位置がメニューまたはジョイスティック インスタンスの上に達したときに、ユーザーが SneakyJoystick または CCMenu クラス インスタンスのいずれかの領域外で画面にタッチし始めると、タッチはインスタンスによって検出されず、代わりに touchMoved の制御下に置かれます (および/または次に touchEnded) シーン レイヤーのメソッド。

これを防ぐ方法はありますか?つまり、外部で開始されたタッチを制御するメニューまたはジョイスティック インスタンスを取得するにはどうすればよいでしょうか?

Cocos2d のドキュメントを読むと、CCMenu は既にマルチタッチ プロトコルに準拠しているように見えるため、その優先度を上げることができるはずです。しかし、私はこれを台無しにすることを恐れています。レイヤーの優先度を変更しようとしましたが、クラッシュしました。

助言がありますか?

編集: さまざまな本で見つけたさまざまなサンプル プロジェクトで、私が説明していることを確認できます。基本的に、誰かが "SneakyJostic" を使用したり、レイヤーに "CCMenu" を追加したりするたびに (任意のプロジェクトで)、オブジェクトの外側からタッチを開始し、オブジェクトに触れている指ユーティリティを移動すると、それは検出されません。アプリをクラッシュさせずにこれを修正するにはどうすればよいですか?

4

2 に答える 2

0

正確に何をしたいのかわかりませんが、コーディング部分に進まない場合は、スプライトまたはメニュー画像に画像の透明部分を追加することで、メニューのタッチ領域を拡張できます。また、ジョイスティックの場合は、コントローラーにゲッサーを使用することもできます。

于 2012-10-29T11:52:15.430 に答える
0

シーンがタッチ イベントの取得を開始すると、touchEnded までのタッチ動作全体が取得されます。一部のマウスベースのシステムで得られるような、ここで役立つ「touchEntered」または「touchExited」タイプのイベントはありません。

試してみることができることの 1 つは、シーンでイベントを処理し、ヒット テストを実行してから、必要に応じてイベントをジョイスティック/メニューに転送することです (単純に touchesMoved を直接呼び出すこともできますが、touchBegan/touchEnded を合成する必要がある場合もあります)。指がジョイスティック/メニュー領域に出入りするときのイベント)。

于 2012-10-30T20:19:31.060 に答える