SpriteKit使用applyImpulse移动旋转的PhysicalBody

问题描述 投票:2回答:2

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

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

ios sprite-kit physics skphysicsbody
2个回答
3
投票

我建议您遵循Sprite Kit的坐标和旋转约定。具体来说,您的精灵图片应该以0度(默认值)朝右,正值是逆时针旋转。就是说,这是一种在小精灵所面对的方向上施加脉冲的方法:

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

2
投票

UPDATED:

通过@ 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)];
}
© www.soinside.com 2019 - 2024. All rights reserved.