sprite physics sprite-kit

¿Hay alguna forma de ver visualmente el límite de SKPhysicsbody del kit de sprites?



sprite-kit (6)

Para Objective-C y iOS <7.1

En tu ViewController.m encuentra este código

SKView *skView = (SKView *)self.view; skView.showsFPS = YES; skView.showsNodeCount = YES;

Después de la última línea agregar

skView.showsPhysics = YES;

Construye y corre y deberías ver todo el cuerpo de la física en el límite.

Me di cuenta de que agrega el shapeNode a self en lugar del spriteNode, así que intente lo siguiente

SKSpriteNode *ship = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"]; CGFloat offsetX = ship.frame.size.width * ship.anchorPoint.x; CGFloat offsetY = ship.frame.size.height * ship.anchorPoint.y; CGMutablePathRef path = CGPathCreateMutable(); CGPathMoveToPoint(path, NULL, 50 - offsetX, 110 - offsetY); CGPathAddLineToPoint(path, NULL, 18 - offsetX, 16 - offsetY); CGPathAddLineToPoint(path, NULL, 140 - offsetX, 15 - offsetY); CGPathCloseSubpath(path); ship.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path]; [self addChild:ship]; SKShapeNode *shape = [SKShapeNode node]; shape.path = path; shape.strokeColor = [SKColor colorWithRed:1.0 green:0 blue:0 alpha:0.5]; shape.lineWidth = 1.0; [ship addChild:shape];

Para Swift y iOS> = 8.0

let skView = self.view as! SKView skView.showsFPS = true skView.showsNodeCount = true skView.showsPhysics = true

Y si quieres un borde personalizado.

let ship = SKSpriteNode(imageNamed: "Spaceship") let offsetX = ship.frame.size.width * ship.anchorPoint.x let offsetY = ship.frame.size.height * ship.anchorPoint.y let path = CGPathCreateMutable() CGPathMoveToPoint(path, nil, 50 - offsetX, 110 - offsetY) CGPathAddLineToPoint(path, nil, 18 - offsetX, 16 - offsetY) CGPathAddLineToPoint(path, nil, 140 - offsetX, 15 - offsetY) CGPathCloseSubpath(path) ship.physicsBody = SKPhysicsBody(polygonFromPath: path) addChild(ship) let shape = SKShapeNode() shape.path = path shape.strokeColor = SKColor(red: 1.0, green: 0, blue: 0, alpha: 0.5) shape.lineWidth = 1.0 addChild(shape)

Ya probado:]

¡¡Buena suerte!!

Estoy usando bodyWithPolygonFromPath para definir el volumen del cuerpo físico, y se usa

http://dazchong.com/spritekit/

Para obtener los caminos requeridos. Pero el camino no parece correcto y deseo ver el límite del camino del cuerpo físico para ver si la forma es correcta.

¿Hay alguna manera de ver el resumen del volumen del cuerpo físico?

Probé el siguiente código, pero no funciona.

ship = [SKSpriteNode spriteNodeWithImageNamed: @ "Spaceship"];

CGFloat offsetX = ship.frame.size.width * ship.anchorPoint.x; CGFloat offsetY = ship.frame.size.height * ship.anchorPoint.y; CGMutablePathRef path = CGPathCreateMutable(); CGPathMoveToPoint(path, NULL, 50 - offsetX, 110 - offsetY); CGPathAddLineToPoint(path, NULL, 18 - offsetX, 16 - offsetY); CGPathAddLineToPoint(path, NULL, 140 - offsetX, 15 - offsetY); CGPathCloseSubpath(path); SKShapeNode *yourline = [SKShapeNode node]; yourline.name = @"yourline"; yourline.path = path; [yourline setStrokeColor:[UIColor redColor]]; [self addChild:yourline]; ship.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path]; //[ship setScale:0.5]; ship.zRotation = - M_PI / 2;


En la nueva versión 7.1 beta hay una funcionalidad que permite esto como se indicó anteriormente.


Esto agregará una forma de línea roja en la parte superior de su nodo. Utilice el mismo camino que definió para el cuerpo físico de su nodo.

+(void)debugPath:(CGPathRef)path onNode:(SKNode*)node { SKShapeNode *yourline = [SKShapeNode node]; yourline.name = @"yourline"; yourline.path = path; [yourline setStrokeColor:[UIColor redColor]]; [node addChild:yourline]; }

Es decir uso

[[self class] debugPath:ship.physicsBody.path onNode:ship];


Para propósitos de prueba, configuraría la nave como SKShapeNode, comentaré su línea SKShapeNode por ahora y estableceré ship.path en la misma ruta que está utilizando para su SKPhysicsBody.

O podrías usar esto:

https://github.com/ymc-thzi/physicsDebugger


Sé que es un poco tarde, pero pensé que podría interesarle mi nueva herramienta que crea automáticamente un camino alrededor de la imagen del sprite (para que no tenga que hacer clic manualmente en los puntos), y luego puede ajustar varios Ajustes para adaptarse mejor a sus necesidades. La herramienta también genera códigos de programa de Objective C y Swift para agregar la ruta a un cuerpo de física de sprites. Espero que sea útil para algunas personas. Gracias:

http://www.radicalphase.com/pathgen/


Su código de nodo de forma es correcto. Parece que tu yourline puede ser agregada a la escena antes de la nave real, por lo que el sprite de la nave se dibujará en la parte superior de la misma, haciéndolo oculto. Asegúrese de configurar yourline.zPosition en el valor más alto, o asegúrese de que [self addChild:yourline] se ejecute después de [self addChild:ship] .