因此,我尝试使用 SpriteKit 和 Swift 3 重新创建流行的 App Store 游戏《One More Line》来挑战 self ;然而,我立即遇到了一个大问题。
1)当用户点击时,如何让我的节点围绕另一个节点旋转
2)我希望我的节点在用户释放手指时继续沿其所面对的相同方向移动(希望这是有道理的......)。
有点像这样
在我的 GameScene.sks 中,我创建了一个不断旋转的中心节点和一个玩家。然后我这样做了:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
player.move(toParent: center)
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
player.move(toParent: self)
}
override func update(_ currentTime: TimeInterval) {
let dx = 5 * cos(player.zRotation)
let dy = 5 * sin(player.zRotation)
player.physicsBody?.applyImpulse(CGVector(dx: dx, dy: dy))
}
玩家向右移动,当我点击它时,它会围绕节点旋转,当我释放时,它会继续向右移动。
我知道我的做法是错误的。任何帮助将非常感激。谢谢!
最佳答案
我不确定我完全理解你在寻找什么,但如果你只是想让一个 Sprite 围绕中心 Sprite 均匀旋转,请添加中心 Sprite ,另一个中心 Sprite (不可见)并将你的外部 Sprite 添加到不可见的中心 Sprite 。然后旋转两个中心 Sprite 。调整outerObject的x位置以使outerObject离中心对象更近或更远。
import SpriteKit
import GameplayKit
class GameScene: SKScene {
override func didMove(to view: SKView) {
anchorPoint = CGPoint(x: 0.5, y: 0.5)
let centerObject = SKSpriteNode(texture: nil, color: UIColor.blue, size: CGSize(width: 20, height: 20))
addChild(centerObject)
let invisibleParent = SKSpriteNode()
addChild(invisibleParent)
let outerObject = SKSpriteNode(texture: nil, color: UIColor.red, size: CGSize(width: 50, height: 50))
outerObject.position.x = 100
invisibleParent.addChild(outerObject)
centerObject.run(SKAction.repeatForever(SKAction.rotate(byAngle: 1, duration: 1)))
invisibleParent.run(SKAction.repeatForever(SKAction.rotate(byAngle: -1, duration: 1)))
}
}
关于swift - 如何让一个 Sprite 节点围绕另一个节点旋转? (还有一条线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43244912/