まず第一に、(複数の)レイヤーは必要ありません。レイヤーの代わりにバッチ ノードを使用できます。ユーザー入力用に 1 つのメイン レイヤーを用意するか、タッチ デリゲート クラスをタッチ ディスパッチャーに登録してユーザー入力を自分で管理することができます。
概念的には、ノード階層を次のようにすることをお勧めします。
scene (touch delegate)
batchNode (places)
batchNode (characters)
また
scene
layer (input)
batchNode (places)
batchNode (characters)
あなたの場所(タイル画像?)が何らかの形で世界中に広がっていると仮定すると、それぞれに位置があります。各場所のキャラクターに、その場所を基準とした座標を持たせるには、次の 2 つのいずれかを行うことができます。
- 文字バッチノードの位置を対応する場所の位置に設定します。これは、その場所の文字のみをバッチ処理する場合に機能します。
- 場所に関係なくすべての同一の文字をバッチ処理する場合は、バッチ ノードに「ダミー」CCSprites (小さな完全に透明な画像を使用) を追加し、それぞれを特定の場所の位置に配置できます。次に、この場所のキャラクターをこのスプライトの子として追加します。キャラクターが別の場所に移動する場合は、1 つのダミー スプライトからそれらを削除し、対応する別のダミー スプライトに追加します。
最後に、スプライトの位置を、スプライトの位置に基づいてローカル座標に変換するヘルパー メソッドをいつでも作成できます。そうすれば、ノード階層を特別に設定する必要がなく、必要に応じてローカル座標を操作できます。これを行うと、ローカル座標を使用するかワールド座標を使用するかは、実際にはあまり違いがないことに気付くかもしれません。ワールド座標は、単純にキャラクターの位置と場所の位置です。単純な加算/減算により、ワールド座標からローカル座標に、またはその逆になります。