结果我希望实现:我有一个节点,它几乎是一个带辐条的自行车轮。当用户录制屏幕时,我希望滚轮不仅会弹跳,而且每次敲击都会旋转。
我现在拥有的:当用户点击屏幕时,节点当前会弹回,就像它应该的那样。但它不会旋转。
我仍在迅速学习,所以非常感谢任何帮助或建议。
代码:
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))
}
}
答案 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)
你的旋转与你基于物理的其他游戏一致。