Physicsbody no se adhiere al punto de anclaje del nodo

Mi escena tiene un montón de rectangularjs con cuerpos físicos que tienen el mismo tamaño que el rectángulo. Me gusta anclar todos mis objects a CGPointZero, sin embargo, me he dado count cuando hago que el cuerpo físico permanece anclado en el medio. En otras palabras, la position de mi cuerpo de física es como 100 píxeles más baja y a la izquierda de la representación visual.

Aquí hay un simple fragment de código:

SKSpriteNode* square = [SKSpriteNode spriteNodeWithColor:[SKColor blackColor] size:CGSizeMake(width, height)]; square.anchorPoint = CGPointZero; //position based on bottom-left corner square.position = CGPointMake(x, y); square.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(width, height)]; 

Cualquier idea o consejo para resolver este problema sería apreciada. Por ejemplo, si pudiera visualizar los cuerpos de la física, eso podría ayudar, pero no estoy seguro de cómo hacerlo.

ACTUALIZACIÓN: Así que he resuelto el problema simplemente sin configurar el punto de anclaje y reposicionando mis rectangularjs. Entonces, el problema aún existe, pero tengo un trabajo en el lugar y el trabajo está funcionando bien.

Escribí esto para arreglar la falta de Apple:

use pathForRectangleOfSize:withAnchorPoint: para replace su llamada a bodyWithRectangleOfSize: cuya breve documentation nos dice el problema: "Crea un cuerpo de física rectangular centrado en el origen del nodo propietario".

 @implementation SKPhysicsBody (CWAdditions) + (CGPathRef)pathForRectangleOfSize:(CGSize)size withAnchorPoint:(CGPoint)anchor { CGPathRef path = CGPathCreateWithRect( CGRectMake(-size.width * anchor.x, -size.height * anchor.y, size.width, size.height), nil); return path; } + (SKPhysicsBody *)bodyWithRectangleOfSize:(CGSize)size withAnchorPoint:(CGPoint)anchor { CGPathRef path = [self pathForRectangleOfSize:size withAnchorPoint:anchor]; return [self bodyWithPolygonFromPath:path]; } @end 

Editar : hay una nueva API en 7.1 para proporcionar esta supervisión.

 + (SKPhysicsBody *)bodyWithRectangleOfSize:(CGSize)s center:(CGPoint)center 

Puedes usar

  [SKPhysicsBody bodyWithRectangleOfSize:size center: center]; CGPoint center = CGPointMake(size.width*(anchorPoint.x-0.5f), size.height*(0.5f-anchorPoint.y)) 

debe transformar el cuadro delimitador de acuerdo con el punto de anclaje del nodo de los padres

Necesita el anchorPoint solo cuando configura la position de su spriteNode. No entiendo bien por qué necesitarías mover physicsBody (que es del mismo tamaño del nodo, supongo) a una esquina … Pero quizás te sea útil este método de class [SKPhysicsBody bodyWithPolygonFromPath: path].

Aquí hay un buen generador para eso: http://dazchong.com/spritekit/

Estoy usando Swift, pero SKPhysicsBody tenía la mitad del ancho y la altura equivocados. Estoy usando el punto de anclaje (0,0). Luego utilicé el método con rectangleOfSize , center :

 var cc = SKSpriteNode(color: UIColor.greenColor(), size: CGSizeMake(32, 64)) cc.physicsBody = SKPhysicsBody(rectangleOfSize: cc.size, center: CGPointMake(32/2, 64/2)) 

Espero que funcione para ustedes también … ¡gracias!

He ejecutado esto por mí mismo al usar SpriteKit. Lamentablemente, parece haber problemas basados ​​en el momento de crear un cuerpo de física y agregar el nodo a la escena. Si intercambia el pedido de su código y se asegura de no hacer CUALQUIER cambio de física hasta que el nodo esté realmente en el tree de procesamiento, eso debería resolver la 'extrañeza' y todo será salsa.