0

シンプルなスプライト キット ゲームを作成していますが、スプライトの 1 つに PhysicsBody を追加すると、間違った位置にあるように見えます。設定したとおりに間違った位置にあり、間違った位置に表示されていることはわかってい skView.showsPhysics = YES; ます。

ここに画像の説明を入力

下隅の正方形は、最初の半円の物理体です。現在、テスト目的で正方形を使用しています。

私のアプリにはビュー フォローが含まれており、移動時にメイン スプライトをフォローします。これを実装するには、リンゴのドキュメントに従い、「myworld」ノードを作成し、そのノードから他のすべてのノードを作成しました。

 myWorld = [SKNode node];

    [self addChild:myWorld];

 semicircle = [SKSpriteNode spriteNodeWithImageNamed:@"SEMICRICLE.png"];
    semicircle.size = CGSizeMake(semicircle.frame.size.width/10, semicircle.frame.size.height/10);
    semicircle.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:semicircle.frame.size];
    semicircle.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
    semicircle.physicsBody.dynamic = YES;
    semicircle.physicsBody.collisionBitMask = 0;
    semicircle.name = @"semicircle";
    [myWorld addChild:semicircle];

ノードを中心にするために、これらのメソッドを呼び出します

- (void)didSimulatePhysics
 {
[self centerOnNode: [self childNodeWithName: @"//mainball"]];
  }

  - (void) centerOnNode: (SKNode *) node
  {
CGPoint cameraPositionInScene = [node.scene convertPoint:node.position fromNode:node.parent];
node.parent.position = CGPointMake(node.parent.position.x - cameraPositionInScene.x,                                                   node.parent.position.y - cameraPositionInScene.y);
   }

私の世界が SkPhysics 本体に影響を与えるかどうかはわかりません...

4

2 に答える 2

2

SKPhysicsBody は、左下隅にある座標 0,0 から開始します。width/10 と height/10 で行ったように領域を小さくすると、左下からサイズが小さくなります。

あなたが探しているのはbodyWithRectangleOfSize:center:だと思います。これにより、物理ボディ領域のベースとなる中心を手動で設定できます。

アップデート:

私が理解していることに基づいて、あなたの最小の半円の写真サイズは画面サイズと同じです. 画像サイズを私が持っている例のようなものに変更することをお勧めします。その後、必要に応じてスプライトの位置を設定し、物理体を半円を含む画像の半分に設定できます。 ここに画像の説明を入力

于 2014-04-05T00:31:35.883 に答える
0

centerOnNode 呼び出しは、didSimulatePhysics 関数ではなく、didEvaluateActions 関数に配置する必要があります。これは、物理が描画される前に世界を動かして同期を保つ必要があるためです。ここにある同様の質問: https://stackoverflow.com/a/24804793/5062806

于 2015-08-22T00:16:48.393 に答える