Cocos2Dを使用してシューティングアップの弾丸地獄スタイルのゲームを作成します。 1本の指がドラッグして船を移動し、コーナーに火の層があります。1つのレイヤーから始まり、ccMovedコール(またはtouchesMoved)を防止するタッチを食べる
私のメインレイヤーから、ccTouchesBegan、ccTouchesMovedおよびccTouchesEndedを検出します。 CGPointをロジックコントローラに渡します。
タッチダウンポイントが2つの「ファイヤーボタン」レイヤーのいずれかにある場合、私は火事イベントをトリガーします。それ以外の場合は、プレイヤー船の新しい場所を設定します。炎の層の領域の外にタッチが移動すると、プレイヤーの船の新しい場所が設定されます。
問題:ファイアレイヤー内の指をドラッグして非ファイアレイヤースペースにすると、「プレイヤーの位置を設定するタッチ移動」ルールのために船がそのポイントにジャンプします。
どのようにこれをよりうまく設計できますか?
「タッチオブジェクト」の配列が必要なのかもしれません。そして、ファイアレイヤの境界を越えるときにそれらを無効にします。私は、タッチ操作に関する重要な概念が不足していると思います。わかっていれば、どこの場所にタップしているのかを比較する「タッチオブジェクト」クラスをハックすることなく、コントロールを与えたいと思います。
お知らせください。ありがとう!
(はい、私は見ました:How do I limit touch handling to one layer when layers overlap?。私の質問には答えられません。rectContainsPointは、タッチがファイアレイヤーの内外にあるかどうかを判断する方法です)。
"移動"領域で2回目をタップすると、接触がワープから始まるのを防ぐために、火災領域のタッチ*ではない*にBOOL iVarを設定しています。 あなたの解決策は動作しません。なぜなら、プレイヤーは同時に移動して発砲できるからです。私が火を打つことからivarをマークし、私の主な動きの指が動くなら、何も起こりません。 (迅速な対応ありがとう) – quantumpotato
プレイヤーが火災エリアに触れてそこから引きずり出すとどうなりますか?船を動かすためにさらに触れることを許している間に、その特定のタッチを無視したいのですか? (私は何かが欠けていたと言っていました - 何かがマルチタッチでしたか?) – jrturton
はい - そうです! 私はこの質問のより簡単なバージョンをここに尋ねました: http://stackoverflow.com/questions/8543473/ignoring-touchesmoved-for-subsequent-touches-while-counting-touchesbegan-total実際には、もっと難しいかもしれません。複数のレイヤーが存在しないためです。 (普遍的な答えがある場合は、フラグを立てる) – quantumpotato