0

キャラクターが死亡したときにタッチイベントをキャンセルする際に発生しているこの問題について、誰か助けてください。画面のX軸に基づいて、キャラクターコントローラー(スプライトに触れて左右にドラッグして移動)があります。私のコントローラ クラスは CCNode のサブクラスであり、タッチを TouchDispatcher に登録するために必要なすべてのメソッドを備えています。ccTouchBegin、ccTouchMove、および ccTouchEnd は正常に動作しますが、ccTouchMove が動作していてキャラクターが死亡している間に、コントローラーをリセットしたいのですが、プレーヤーの位置を画面上の開始位置に設定しますが、指を離すまでトリガーされません (つまり、ccTouchEnd)トリガーすると、GameLayer(CCLayer) のリセット プレーヤー/コントローラーが起動します。

CCTouchCancel メソッドを追加することでうまくいくと思いましたが、起動していません。各 Touch イベント メソッドは、アクションを実行する前に、まずコントローラーの状態 (IDLE、ACTIVE、STOP) をチェックします。ドラッグを処理する update メソッドもありますが、プレイヤーがキャラクターをドラッグ/移動できるようにする前に、 controller.state == ACTIVE であることも確認します。

キャラクターが死亡したときの Gamelayer の update メソッドで、controller.state = STOP を設定しました。コントローラの STOP 状態の更新メソッド[[[CCDirector sharedDirector] touchDispatcher] removeDelegate: self];で、メソッド内の同じコードを呼び出しますonExitが、タッチ イベントがキャンセルされません。指を離した場合にのみタッチイベントが停止します。次に、Gamelayer で行われた状態変更が発生します

お知らせ下さい。

4

1 に答える 1

0

キャラクターが死亡したときに、キャラクターのコントローラーの状態が STOP に変更されない理由がわかりました。CCTouchCancel メソッドを実装しましたが、トリガーされていなかったため、画面から指を離すまでタッチ イベントがキャンセルされませんでした。

update: (ccTime)delta メソッドを実装しました。このメソッドでは、ACTIVE 状態をチェックし、何らかのアクションを実行します。update メソッドをコメントアウトした後、すべてが期待どおりに機能しました。CCTouchMove メソッドは、指が画面に触れている限り継続的なタッチ位置の検出を処理するため、更新メソッドは必要ありませんでした。更新メソッドを実行する必要はありません。

于 2013-08-27T16:20:21.720 に答える