6

私が取り組んでいる SpriteKit ゲームをかなりよく開発し、いくつかのコードを追加して新しい SKSpriteNode をシーンに追加しました (コードの他の場所で行ったのと同じですが、何らかの理由で今回は単に無視していますノードに設定した位置、明示的に .position = CGPointMake(x,y) で試し、 [node setPosition:CGPointMake(x,y)] を試しました

どちらも機能しません...ノードはシーンに追加されませんが、常に0,0で、何をしても、xとyの両方をチェックして、それらが有効でシーンの範囲内にあることを確認し、試しました明示的なフロートなどを使用するには、何をしても問題ありません。このノードは常に 0,0 に表示され、まったく意味がありません。私はゲームプレイの過程で他の数十のノードで行っているのと同じことをすべて行っていますが、このノードはどこにも表示されず、何をしても 0,0 以外には表示されません:

int width = 64;
SKSpriteNode *node = [[SKSpriteNode alloc] initWithColor:[SKColor grayColor] size:CGSizeMake(width,25)];
node.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:node.size];
node.physicsBody.dynamic = NO;
node.physicsBody.categoryBitMask=nodeCategory;
node.name=@"node";
node.position = CGPointMake(200,250);
//Have also tried [node setPosition:CGPointMake(200,250);
[self addChild:node];

私はここで完全に途方に暮れています.CGPointMakeへの入力に.0を追加して、フロートとして処理されることを確認しました...このノードで何をしても、シーンに追加されると常にデフォルトは 0,0 の位置ですが、イライラしています。あらゆる種類のノードを問題なく追加しています。このノードの追加に関する何かが機能していないだけで、何が違うのか、その理由がわかりません。

4

1 に答える 1

3

私はこの同じ問題を抱えています。ほとんどのゲーム内ノードがスーパークラスとして使用する SKSpriteNode のサブクラスがあります。このメソッドを追加しました。これは、ポジショニングの問題に遭遇するたびに使用します。

- (void)refreshPhysicsBodyAndSetPosition:(CGPoint)position {

    /*
     * Weird thing here: if I just set the position of these nodes, they
     * end up at position (0,0). However, if I remove the physics body, set
     * the position, and then re-add the physics body, the nodes are
     * placed correctly.
     */

    SKPhysicsBody *tempPhysicsBody = self.physicsBody;
    self.physicsBody = nil;

    // Position and re-add physics body
    self.position = position;
    self.physicsBody = tempPhysicsBody;
}

明らかに、これは問題に対する本当の答えではありませんが、一部の人にとっては役立つ回避策です。Apple Developer フォーラムで質問を受け付けています。こちらで確認できます。

https://devforums.apple.com/thread/222332

すぐに連絡が来ることを願っています。

于 2014-03-26T19:00:27.817 に答える