角动脉

时间:2015-10-31 23:10:52

标签: swift rotation sprite-kit skphysicsbody

所以我使用角度脉冲来旋转一个带有physicsBody的精灵。 我希望屏幕的一侧在一个方向上施加一个脉冲,而屏幕的另一侧则在另一个方向上施加一个脉冲(参见下面的代码)。

 override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {

    // Defines UI Touch //
    let touch = touches.first as UITouch!
    let touchPosition = touch.locationInNode(self)


    // Left or Right movement based on touch //
    if touchPosition.x < CGRectGetMidX(self.frame) {sprite.physicsBody?.applyAngularImpulse(-10)}
    else {sprite.physicsBody?.applyAngularImpulse(10)}

    // Smooths motion
    let rate: CGFloat = 0.5; //Controls rate of motion. 1.0 instantaneous, 0.0 none.
    let relativeVelocity: CGVector = CGVector(dx:angularVelocity-sprite.physicsBody!.velocity.dx, dy:0);
    sprite.physicsBody!.velocity=CGVector(dx:sprite.physicsBody!.velocity.dx+relativeVelocity.dx*rate, dy:0);

}

唯一的问题是,显然如果你按屏幕的左侧,然后屏幕的右侧......它取消了冲动并停止了精灵。

我的问题是,我怎样才能更改上面的代码,使其不会取消,相反,冲动会以相反的方向充满力量?

我知道这可以通过将relativeVelocity设为0来轻松实现,但我无法解决如何将此值设为0而不会在&#39; int&#39;之间产生冲突。和&#39; CGVector&#39;

任何帮助非常感谢!

1 个答案:

答案 0 :(得分:3)

在应用相反的角度脉冲之前,您可能希望将angularVelocity设置为0。这是一个例子:

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {

    // Defines UI Touch //
    let touch = touches.first as UITouch!
    let touchPosition = touch.locationInNode(self)

    // Left or Right movement based on touch //
    if touchPosition.x < CGRectGetMidX(self.frame) {
        sprite.physicsBody?.angularVelocity = 0
        sprite.physicsBody?.applyAngularImpulse(-10)
    } else {
        sprite.physicsBody?.angularVelocity = 0
        sprite.physicsBody?.applyAngularImpulse(10)
    }        
}