xcode image sprite-kit skphysicsbody

Cómo ajustar el tamaño corporal físico de un SKSpriteNode a su imagen en Xcode con SpriteKit



sprite-kit skphysicsbody (1)

Así que no estoy seguro de si esto es posible, pero estoy tratando de adaptar el cuerpo de la física para que combine con mi imagen. Mucha gente me ha dicho que el hitbox para el personaje en mi juego en la App Store de iOS (StreakDash - ¡vaya, descárgalo!) No funciona bien, ya que hace que el juego sea mucho más difícil (la caja de golpeo se convierte en un obstáculo aunque el personaje ni siquiera parece tocarlo). Esto se debe al hecho de que los hitboxes son rectangulares, mientras que mi personaje tiene una forma extraña. ¿Hay alguna forma de evitar esto? Pensé en algunas formas que no funcionaban por completo (por ejemplo, tratando de cambiar la forma real del marco / lienzo de rectangular a otra cosa, tratando de cambiar la forma / tamaño del cuadro de mando, tratando de alterar la imagen, etc.). Sería genial si pudiera darme consejos sobre si debería o no cambiar el hitbox en primer lugar (¿es el tipo de juego que induce a la rabia que hace que la gente quiera seguir jugando o parar?). ¡Pero encontrar la manera de resolver el problema sería lo mejor!

Aquí hay una foto de mi personaje con su hitbox:

Aquí hay solo algunos códigos básicos con SKSpriteNode y el cuerpo de la física:

sprite = [SKSpriteNode spriteNodeWithImageNamed:@"stick"]; sprite.size = CGSizeMake(self.frame.size.width/6.31, self.frame.size.height/3.2); sprite.physicsBody =[SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake (sprite.size.width, sprite.size.height)]; sprite.position = CGPointMake(self.frame.size.width/5.7, self.frame.size.height/2.9); sprite.physicsBody.categoryBitMask = personCategory; sprite.physicsBody.contactTestBitMask = lineCategory; sprite.physicsBody.dynamic = NO; sprite.physicsBody.collisionBitMask = 0; sprite.physicsBody.usesPreciseCollisionDetection = YES;


Sugiero representar el cuerpo físico con una forma de polígono. Tienes dos formas de mejorar bodyWithRectangleOfSize :

  1. La forma Lazy es usar bodyWithTexture: size: que creará un cuerpo de física a partir del contenido de una textura. Pero, como sugirió Apple, cuanto más complejo es su cuerpo físico, más trabajo debe simularse correctamente. Es posible que desee hacer una compensación entre la precisión y el rendimiento.
  2. La forma más adecuada es representar el límite de tu sprite con una forma de polígono convexo . Ver bodyWithPolygonFromPath:. Hay algunas herramientas en línea para generar el código de path en la interfaz de usuario. Aquí está el: SKPhysicsBody Path Generator (tenga cuidado con el offset y el punto de anclaje). Si conoce la forma de generar código CGMutablePathRef usted mismo, será más fácil adaptarse a su situación.