当用户点击屏幕时如何使Sprite节点旋转?斯威夫特3

时间:2016-10-23 22:07:23

标签: ios swift sprite-kit nodes skspritenode

结果我希望实现:我有一个节点,它几乎是一个带辐条的自行车轮。当用户录制屏幕时,我希望滚轮不仅会弹跳,而且每次敲击都会旋转。

我现在拥有的:当用户点击屏幕时,节点当前会弹回,就像它应该的那样。但它不会旋转。

我仍在迅速学习,所以非常感谢任何帮助或建议。

代码

    wheelNode = SKSpriteNode(imageNamed: "wheel")
    wheelNode.zPosition = 1
    wheelNode.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
    wheelNode.physicsBody = SKPhysicsBody(circleOfRadius: wheelNode.size.width / 0.70)
    wheelNode.physicsBody?.isDynamic = true
    wheelNode.physicsBody?.allowsRotation = true

    self.addChild(wheelNode)

override func touchesBegan(_ _touches: Set<UITouch> , with event: UIEvent?) {
    if gameOver == false {

    self.wheelNode.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
    self.wheelNode.physicsBody?.applyImpulse(CGVector(dx: 5, dy: 25))

    }

}

2 个答案:

答案 0 :(得分:4)

要让SKSpriteNode旋转,请将其添加到touchesBegan

wheelNode.run(SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat.pi * 2.0, duration: 2)), withKey: "rotateWheel")

要向相反方向旋转,请将CGFloat.pi更改为-CGFloat.pi

您可以使用持续时间进行操作以更改完整旋转的持续时间。

touchesEnded中,要停止操作,请致电:

removeAction(forKey: "rotateWheel")

这样,车轮旋转不会受到物理世界的影响。如果你想以不同的方式进行旋转,请看一下这个链接(并阅读来自@ Knight0fDragon的评论):https://stackoverflow.com/a/39779986/6728196

但逻辑仍然是相同的。您需要在touchesBegan中开始轮播,然后在touchesEnded中结束/停止。

答案 1 :(得分:3)

在touchesBegan方法中添加以下行:

self.wheelNode.physicsBody?.applyAngularImpulse(5)

你的旋转与你基于物理的其他游戏一致。