2016-11-19 1 views
1

J'essaie de créer un corps physique pour un noeud de sprite qui est uniquement pour le contour du noeud de sprite. Pour cela, j'ai essayé d'utiliser edgeLoopFromRect. Cependant, lorsque j'essaie, le corps de la physique ne correspond pas à la position du noeud de l'image-objet. Par exemple, le nœud de sprite serait au centre de l'écran, et son corps physique serait dans le coin supérieur de l'écran (voir image - le contour du corps de la physique ne montre que le coin, comme certains sont hors de l'écran). Je veux l'utiliser pour créer le contour d'une zone de jeu, qui agira comme un pensionnaire pour l'objet à contacter pour le jeu terminé.Swift, SpriteKit: position du corps physique incorrecte pour SpriteNode lors de l'utilisation de edgeLoopFromRect

Screen Shot

Voici mon code:

//Physic Body Outline Test 

    let screenS = SKSpriteNode(imageNamed: "TestImage") 
    screenS.size = CGSize(width: 100, height: 100) 
    screenS.position = CGPoint(x: self.size.width/2, y: self.size.height/2) 
    screenS.physicsBody = SKPhysicsBody(edgeLoopFrom: screenS.frame) 
    screenS.physicsBody!.affectedByGravity = false 
    self.addChild(screenS) 

Pourquoi la position si loin? Qu'est-ce que je fais mal? Est-ce la même approche correcte pour mettre en place un plan de corps physique pour une zone de jeu?

Merci! : D

+0

Pouvez-vous poster une capture d'écran montrant le sprite et le physicsBody? –

+0

"Je veux utiliser ceci pour créer les contours d'une zone de jeu, qui agira comme une bordure pour l'objet avec lequel entrer en contact" - vous voulez que le contour de l'image-objet soit la frontière avec laquelle l'image-objet doit entrer en contact? Sprtes ont généralement des corps de physique de volume-base; les corps basés sur les arêtes sont utilisés pour les limites, etc., mais vous utilisez généralement l'image de la scène pour empêcher l'image-objet de sortir de l'écran. –

Répondre

2

Il suffit de déplacer la ligne définissant la position du sprite après la définition de physicsBody - il semble y avoir un bug dans SpriteKit à ce sujet. Vous devriez vous retrouver avec:

screenS.physicsBody = SKPhysicsBody(edgeLoopFrom: screenS.frame) 
screenS.position = CGPoint(x: self.size.width/2, y: self.size.height/2) 

Il est encore un peu bizarre d'utiliser un edgeloop comme physicsBody pour un sprite - SK pensera le sprite n'a pas etc de masse et les interactions de la physique ne fonctionnera pas comme prévu.

+0

merci: D et merci pour le conseil, je vais avoir un jeu avec :) – HeanMachine

1

Si vous supprimez la ligne screenS.position, cela devrait fonctionner, par défaut, les sprites sont déjà centrés sur le centre des parents, en définissant la position avant d'ajouter l'image-objet en tant qu'enfant, je pense qu'elle ne bouge que PhysicsBody le sprite lui-même de ce que j'ai testé.

1

Vous utilisez le cadre de sprites lors de la création d'un corps de physique, le corps de physique est relatif à l'image-objet que vous avez utilisé, c'est pourquoi il est désactivé. Ajoutez le corps physique avant de déplacer la position de l'image-objet, et il doit s'aligner.