SpriteKit使用applyImpulse移动旋转physicsBody

时间:2014-09-02 17:12:13

标签: ios sprite-kit physics skphysicsbody

我想在基于physicsBody旋转的方向上使用applyImpulse方法移动physicsBody。

敌人的例子,物理身体是一个方形的形状,我称之为“移动”,它将施加一个冲动,使其垂直向上移动。然后我调用一个方法将physicsBody旋转45度。如果我再次调用“move”方法,physicsBody将向右和向上对角移动。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

我建议您遵循Sprite Kit的坐标和旋转约定。具体来说,您的精灵图像应该面向零度(默认值),正值是逆时针旋转。也就是说,这是一种在精灵面临的方向上施加冲动的方法:

// 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)];

答案 1 :(得分:2)

<强>更新:

由于@ 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)];
}