0

ノードのローカル座標を指定して親座標を返すcocos2d関数はありますか?これは非常に一般的なユースケースである必要がありますが、ネイティブのcocos2d関数は見つかりませんでした。ありますか?

こんな感じだと思います。注、私はこれをテストしていません。;)

-(CGPoint) nodeToParent: (CGPoint) localPoint
{
  CGFloat phi = -self.rotation * B2_pi / 180;
  return ccpAdd(self.position, ccpRotateByAngle(localPoint, ccp(0, 0), phi));
}
4

4 に答える 4

3

m.dingが言ったように... parent-> ConvertToNodeSpace() .....

ここに説明がありますので、いつ何をすべきかがわかりますか?

convertToWorldSpace(const CCPoint& nodePoint) は、ノード上の座標を SCREEN 座標に変換します。アンカー ポイントと位置 (0,0) をスクリーンにアタッチした layerA を用意し、このレイヤーのポイント (100, 100) にスプライトを配置します。スプライトのSCREEN座標はどうなる?- (100, 100)

layerA をポイント (- 50, - 20) に移動してみましょう。スプライトのSCREEN座標はどうなる?- (100 - 50, 100 - 20)、つまり (50, 80) - layerA->convertToWorldSpace(ccp(100, 100)) を呼び出すと、これが convertToWorldSpace から返されます。

convertToWorldSpaceAR については、アンカー ポイントに関連して位置を返します。つまり、シーンのルート レイヤーに AP (0.5f, 0.5f) がある場合、デフォルトでは、convertToWorldSpaceAR は画面の中心に相対的な位置を返す必要があります。convertToNodeSpace を使用しました

convertToNodeSpace(const CCPoint& worldPoint) - SCREEN 座標を NODE のローカルに変換します。つまり、レイヤーを移動した例の場合: layerA->convertToNodeSpace(ccp(50, 80)) - (100, 100) - スプライトのノード座標を返す必要があります。

convertToNodeSpaceAR - convertToWorldSpaceAR と同じロジック

于 2012-11-07T16:51:07.200 に答える
1

親ノードが

CCSprite* parent;

あなたが使用することができます:

parent->convertToNodeSpace();
于 2012-11-05T00:09:50.547 に答える
0

だと思います

-(CGPoint) convertToWorldSpace:(CGPoint)pt

トリックを行うことができます。ここを見てください。

于 2012-11-02T18:08:21.620 に答える
0

あなたは正しい軌道に乗っているようです。 [node position]親の座標空間でノードの位置を指定する必要があるため、からオフセットされたローカル ポイントがある場合は、[node position]行ったようにオフセットを追加する必要があります。これが正しい方法かどうかはccpRotateByAngleわかりませんが、テストして確認するだけです!

于 2012-11-04T12:03:46.407 に答える