ios - SpriteKit mueve física rotadacuerpo con applyImpulse
sprite-kit physics (2)
ACTUALIZADO:
Corregido con el siguiente gracias a @ 0x141E
-(void)characterJump {
CGFloat radianFactor = 0.0174532925;
CGFloat rotationInDegrees = _body.zRotation / radianFactor;
CGFloat newRotationDegrees = rotationInDegrees + 90;
CGFloat newRotationRadians = newRotationDegrees * radianFactor;
CGFloat r = 500;
CGFloat dx = r * cos(newRotationRadians);
CGFloat dy = r * sin(newRotationRadians);
[_body.physicsBody applyImpulse:CGVectorMake(dx, dy)];
}
Quiero mover un physicsBody con el método applyImpulse en una dirección basada en la rotación physicsBody.
Por ejemplo, PhysicsBody tiene forma cuadrada, yo llamo "movimiento" y aplicaré un impulso para que se mueva verticalmente. Luego llamo a un método para rotar el cuerpo físico 45 grados a la derecha. Si vuelvo a llamar al método "mover", physicsBody se moverá en diagonal hacia la derecha y hacia arriba.
¿Alguien puede ayudar, por favor?
Sugiero que sigas las convenciones de rotación y coordenadas de Sprite Kit. Específicamente, la imagen de su sprite debe mirar hacia la derecha a cero grados (el valor predeterminado), y un valor positivo es una rotación en sentido contrario a las agujas del reloj. Dicho esto, esta es una forma de aplicar un impulso en la dirección que enfrenta un sprite:
// Specify the force to apply to the SKPhysicsBody
CGFloat r = 5;
// Create a vector in the direction the sprite is facing
CGFloat dx = r * cos (sprite.zRotation);
CGFloat dy = r * sin (sprite.zRotation);
// Apply impulse to physics body
[sprite.physicsBody applyImpulse:CGVectorMake(dx,dy)];