SKPhysicsBody de SpriteKit con la herramienta de ayuda de polígono

Me pregunto si hay una herramienta que podría usarse para la generación sencilla de cuerpos físicos complejos en SpriteKit. Me gustaría tener un cuerpo físico basado en el volumen con formas de tipo polígono. SpriteKit permite crear tales cuerpos con ese método:

+ (SKPhysicsBody *)bodyWithPolygonFromPath:(CGPathRef)path 

Lamentablemente, es una tarea que consume mucho tiempo generar dichas rutas de forma manual, y podría ser problemático durante la prueba. Hay una aplicación SpriteHelper que le permite definir la forma del cuerpo dentro de un editor visual fácil de usar, pero esta aplicación no puede exportar rutas que podrían usarse aquí. Fue hecho para cocos2d y hace muchas cosas como embalaje de texturas, etc. que no necesito y no puedo usar con SpriteKit. ¿Alguien sabe una solución que le permita definir CGPath fácilmente o incluso autogenerarlas desde imágenes PNG con canal alfa? Aunque la función de autogeneración de mi experiencia necesitaría optimización, porque las formas del cuerpo deberían ser lo más simples posible cuando las texturas tuvieran formas más complicadas.

Estoy buscando exactamente lo mismo, ya que resultó que he hecho una pequeña aplicación web para este propósito.

SKPhysicsBody Path Generator

como acción en el ejemplo: enter image description here

Actualización 2015-02-13: script

     SpriteKit Tools - SKPhysicsBody Path Generator     

SKPhysicsBody Path Generator

Want to use [SKPhysicsBody bodyWithPolygonFromPath:path] easier way like me? Here with a small helper for easier path drawing, hope it help others too.

Basic Instruction
  1. Drag and drop the sprite image into drop zone.
  2. Start drawing path by clicking on coordinates.
Some Rules / Known Issue
  • Path need to be as a convex polygonal path with counterclockwise winding and no self intersections. The points are specified relative to the owning node's origin. (documentation link)
  • Please use Chrome for best compatibility as I have not tested on other browsers.

Retina? (please check before declaring path)

X:0 Y:0


Output
 SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"img"]; CGFloat offsetX = sprite.frame.size.width * sprite.anchorPoint.x; CGFloat offsetY = sprite.frame.size.height * sprite.anchorPoint.y; CGMutablePathRef path = CGPathCreateMutable();  CGPathCloseSubpath(path); sprite.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path]; 

Creé una clase de editor y cargador para crear SKPhysicsBodies complejos e importarlos a tu código. Te permite rastrear alrededor de tu sprite, agregar múltiples cuerpos y exportar todo dentro de una interfaz bastante agradable. Consulte el SKImport aquí y el editor .

Screencast

Sé que esto es un poco tarde, pero acabo de crear una herramienta genial para este propósito que crea automáticamente un camino alrededor de la imagen de sprite (para que no tengas que hacer clic manualmente en los puntos) y luego puedes ajustar varias configuraciones para adaptarse mejor a sus requisitos. La herramienta también genera tanto el código de progtwig Objective C como 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/

Aquí está el guión original (de DazChong) adaptado para Swift

SKPhysicsBody Path Generator Swift Version

     SpriteKit Tools - SKPhysicsBody Path Generator (Swift version      

SKPhysicsBody Path Generator

Want to use SKPhysicsBody(polygonFromPath: path) easier way like me? Here with a small helper for easier path drawing, hope it help others too.

Basic Instruction
  1. Drag and drop the sprite image into drop zone.
  2. Start drawing path by clicking on coordinates.
Some Rules / Known Issue
  • Path need to be as a convex polygonal path with counterclockwise winding and no self intersections. The points are specified relative to the owning node's origin. (documentation link)
  • Please use Chrome for best compatibility as I have not tested on other browsers.

Retina? (please check before declaring path)

X:0 Y:0


Output
 let sprite = SKSpriteNode(imageNamed: "codeImgName") let offsetX = sprite.size.width * sprite.anchorPoint.x let offsetY = sprite.size.height * sprite.anchorPoint.y let path = CGPathCreateMutable()  CGPathCloseSubpath(path) sprite.physicsBody = SKPhysicsBody(polygonFromPath: path) 

Parece que falta la herramienta generadora Skphysicsbody Path. Escribí una aplicación que hace lo mismo en Mac: https://itunes.apple.com/us/app/physicsbodymaker/id951249779?ls=1&mt=12

Impresionante aplicación web pequeña, por DazChong. ¡¡Y no puedo esperar la actualización de PhysicsEditor !!

Este también está en desarrollo

Puedes descargarlo en el escenario alfa aquí

enter image description here

Esta es una adaptación de la respuesta de Xelt en Swift 3.

     SpriteKit Tools - SKPhysicsBody Path Generator (Swift version      

SKPhysicsBody Path Generator

Want to use SKPhysicsBody(polygonFromPath: path) easier way like me? Here with a small helper for easier path drawing, hope it help others too.

Basic Instruction
  1. Drag and drop the sprite image into drop zone.
  2. Start drawing path by clicking on coordinates.
Some Rules / Known Issue
  • Path need to be as a convex polygonal path with counterclockwise winding and no self intersections. The points are specified relative to the owning node's origin. (documentation link)
  • Please use Chrome for best compatibility as I have not tested on other browsers.

Retina? (please check before declaring path)

X:0 Y:0


Output
 let sprite = SKSpriteNode(imageNamed: "codeImgName") let offsetX = sprite.size.width * sprite.anchorPoint.x let offsetY = sprite.size.height * sprite.anchorPoint.y let path = CGMutablePath()  path.closeSubpath() sprite.physicsBody = SKPhysicsBody(polygonFromPath: path) 

Puedes hacer esto ahora para generar el cuerpo físico del PNG de tu sprite:

 SKSpriteNode *yourPhysicsSprite = [SKSpriteNode spriteNodeWithImageNamed:@"yourPNG"]; yourPhysicsSprite.physicsBody = [SKPhysicsBody bodyWithTexture:yourPhysicsSprite.texture alphaThreshold:0.0f size:yourPhysicsSprite.texture.size]; 

Menos preciso y tal vez más costoso que hacerlo a mano, pero funciona bien.

    Intereting Posts