2014-01-26 8 views
6

Ich habe ziemlich gut entwickelt SpriteKit Spiel Ich arbeite an, fügte Code hinzu, um einen neuen SKSpriteNode der Szene hinzuzufügen, (selbe wie ich Dutzende von anderen Orten gemacht habe im Code, aber aus irgendeinem Grund ignoriert es diesmal nur die Position, die ich für den Knoten gesetzt habe, ich habe es durch explizite .position = CGPointMake (x, y) versucht und versuche den [Knoten setPosition: CGPointMake (x, y)]SKNode Position funktioniert nicht, immer auf Standard 0,

Weder Arbeit ... der Knoten wird hinzugefügt, um die Szene, aber immer bei 0,0, egal was ich tue, haben beide x und y überprüft, um sicherzustellen, dass sie gültig sind und im Bereich der Szene, und versuchte, explizite floats etc. zu verwenden, und es ist egal, was ich tue, dieser Knoten erscheint immer bei 0,0 und es macht absolut keinen Sinn.Ich mache alles dasselbe, was ich mit doz mache ens von anderen Knoten über den Verlauf des Spiels aber dieser Knoten wird einfach nicht überall, aber 0,0 egal, was ich tue: mit einem Verlust

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; 
[email protected]"node"; 
node.position = CGPointMake(200,250); 
//Have also tried [node setPosition:CGPointMake(200,250); 
[self addChild:node]; 

ich hier völlig bin, habe ich versucht, das Hinzufügen .0 zu den Eingaben in CGPointMake, um sicherzustellen, dass sie als floats nichts behandelt werden. Egal, was ich mit diesem Knoten mache, wenn er zur Szene hinzugefügt wird, wird immer die Position 0,0 verwendet, und ich bin frustriert. Ich füge alle Arten von Knoten ohne Vorfall hinzu, nur etwas über diesen Knoten hinzufügen, der gerade nicht funktioniert und kann nicht herausfinden, was anders ist oder warum.

+1

try: ohne Physik Körper/set Position vor Körpern zuweisen/Unterklasse von Spriten erstellen und setPosition außer Kraft setzen und einen Haltepunkt gesetzt keine andere Codeposition setzt, um zu überprüfen – LearnCocos2D

+0

die Zeile „node.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize herausnehmen: Knoten. Größe];" scheint das Problem zu lindern, aber ich verstehe nicht warum ... Ich erstelle einen Physikkörper mit der Größe jedes Knotens, den ich erstelle, und habe keine Probleme ... Ich verstehe nicht, warum das in diesem Fall das verursacht Position ignorieren ... Sehr, sehr merkwürdig. – user282172

+0

es könnte in anderen Körpern so durch Kontakt Resolver bewegt werden gequetscht werden, oder es könnte nicht ändern Position wegen dynamic = nein, und Sie könnten versuchen, eine Kante Schleife/Kette Körper, denn das sind wirklich statische Körper – LearnCocos2D

Antwort

3

Ich habe das gleiche Problem. Ich habe eine Unterklasse von SKSpriteNode, die die meisten meiner In-Game-Knoten als Superklasse verwenden. Ich habe diese Methode gegeben, die ich, wenn ich in das Positionierungsproblem führen:

- (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; 
} 

Offensichtlich ist dies auf die Frage keine wirkliche Antwort ist, aber es ist eine Abhilfe, die einige von Ihnen helfen kann. Ich habe eine Frage auf der Apple Developer Forum geöffnet, die Sie hier sehen können:

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

der Hoffnung, höre ich bald wieder.