Sprite Kit: aplica Impulse para disparar proyectiles al personaje

Estoy desarrollando un juego con Sprite-Kit (Objective-C). Es un juego en el que controlas un pájaro en vuelo y se disparan flechas y otros proyectiles malos desde los lados derecho / superior / inferior de la pantalla. Estoy usando la física en lugar de una SKAction para lograr esto, ya que quiero que parezca lo más realist posible. Así que sé usar applyImpulse en el proyectil para dispararlo hacia el pájaro, pero lo que me pregunto es cómo se puede garantizar que el proyectil se dispare directamente al pájaro, sin importar el posicionamiento y del pájaro y el posicionamiento y del proyectil antes de aplicar Impulse?

Estoy teniendo un momento muy frustrante para lograr esto, así que cualquier ayuda en este asunto sería muy apreciada. Gracias.

Los pasos básicos son

  1. Calcula los componentes del vector desde el lanzador de proyectiles hasta el ave
  2. Normalice los componentes (opcional)
  3. Cree un vector escalando los componentes (normalizados)
  4. Aplicar impulso al proyectil usando el vector

Aquí hay un ejemplo de cómo hacer eso.

Obj-C

// Calculate vector components x and y CGFloat dx = bird.position.x - launcher.position.x; CGFloat dy = bird.position.y - launcher.position.y; // Normalize the components CGFloat magnitude = sqrt(dx*dx+dy*dy); dx /= magnitude; dy /= magnitude; // Create a vector in the direction of the bird CGVector vector = CGVectorMake(strength*dx, strength*dy); // Apply impulse [projectile.physicsBody applyImpulse:vector]; 

Rápido

 // Calculate vector components x and y var dx = bird.position.x - launcher.position.x var dy = bird.position.y - launcher.position.y // Normalize the components let magnitude = sqrt(dx*dx+dy*dy) dx /= magnitude dy /= magnitude // Create a vector in the direction of the bird let vector = CGVector(dx:strength*dx, dy:strength*dy) // Apply impulse projectile.physicsBody?.applyImpulse(vector)