1

セットアップの簡単な概要を説明しましょう。

世界がある。
世界の中には、たくさんの場所があります。
中にはたくさんのキャラクターがいます。
現在、多くのキャラクターが同じテクスチャを共有しています。

現在、
world(layer)-batchNode-character スプライトがあります。world(layer)-batchNode-place スプライト

したがって、キャラクターの位置は、(概念的に) いる場所ではなく、世界に対して相対的です。

クラス階層をどのように設定して、
まだ batchNode の機能
を利用し、キャラクターのローカル座標を使用できるようにすることができますか?

world(layer)-place(layer)-batchNode-character(sprite) のような単純な構造
は機能しません。なぜなら、ワールドには多くの共通キャラクターが存在するが、batchNode を共有していないためです。

4

1 に答える 1

2

まず第一に、(複数の)レイヤーは必要ありません。レイヤーの代わりにバッチ ノードを使用できます。ユーザー入力用に 1 つのメイン レイヤーを用意するか、タッチ デリゲート クラスをタッチ ディスパッチャーに登録してユーザー入力を自分で管理することができます。

概念的には、ノード階層を次のようにすることをお勧めします。

scene (touch delegate)
  batchNode (places)
  batchNode (characters)

また

scene
  layer (input)
    batchNode (places)
    batchNode (characters)

あなたの場所(タイル画像?)が何らかの形で世界中に広がっていると仮定すると、それぞれに位置があります。各場所のキャラクターに、その場所を基準とした座標を持たせるには、次の 2 つのいずれかを行うことができます。

  1. 文字バッチノードの位置を対応する場所の位置に設定します。これは、その場所の文字のみをバッチ処理する場合に機能します。
  2. 場所に関係なくすべての同一の文字をバッチ処理する場合は、バッチ ノードに「ダミー」CCSprites (小さな完全に透明な画像を使用) を追加し、それぞれを特定の場所の位置に配置できます。次に、この場所のキャラクターをこのスプライトの子として追加します。キャラクターが別の場所に移動する場合は、1 つのダミー スプライトからそれらを削除し、対応する別のダミー スプライトに追加します。

最後に、スプライトの位置を、スプライトの位置に基づいてローカル座標に変換するヘルパー メソッドをいつでも作成できます。そうすれば、ノード階層を特別に設定する必要がなく、必要に応じてローカル座標を操作できます。これを行うと、ローカル座標を使用するかワールド座標を使用するかは、実際にはあまり違いがないことに気付くかもしれません。ワールド座標は、単純にキャラクターの位置と場所の位置です。単純な加算/減算により、ワールド座標からローカル座標に、またはその逆になります。

于 2012-06-21T08:48:44.670 に答える