2014-09-02 101 views
2

我想使用applyImpulse方法以基於physicsBody旋轉的方向移動physicsBody。例如,physicsBody是一個正方形,我稱之爲「移動」,它將應用脈衝使其向上垂直移動。然後我調用一個方法來旋轉右側的物理體45度。如果我再次調用「移動」方法,那麼physicsBody將向右和向上對角移動。SpriteKit使用applyImpulse移動旋轉physicsBody

任何人都可以幫忙嗎?

回答

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)]; 
+0

好像在每次都從左邊衝動?!你有空嗎? – shahidaltaf 2014-09-03 08:13:25

+0

在應用衝動之前是否旋轉了精靈? – 0x141E 2014-09-03 08:34:46

+0

現在工作,上面的示例代碼。謝謝 – shahidaltaf 2014-09-05 15:55:00

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