我正在尝试使球SKSpriteNode在所有方向(包括对角线和所有其他方向)上移动。 UIGesture无法使用它,因此我需要使用UIPanGesture,但是我不知道如何将其实现到SpriteKit文件中。 到目前为止,这就是我所拥有的。有帮助吗?球形精灵节点称为“球形”。
func handlePan(recognizer:UIPanGestureRecognizer) {
let translation = recognizer.translation(in: self.view)
if let view = recognizer.view {
view.center = CGPoint(x:view.center.x + translation.x,
y:view.center.y + translation.y)
}
recognizer.setTranslation(CGPoint.zero, in: self.view)
}
答案 0 :(得分:0)
请注意,SpriteKit和UIKit具有完全不同的坐标系(Spritekit是笛卡尔坐标,UIKit反映在X轴上),因此,未经转换就无法在Spritekit中使用UIKit坐标。幸运的是,SKScene和SKNode具有将SKView和其他SKNode的点转换为节点本地空间的方法。
@objc private func pan(_ recognizer: UIPanGestureRecognizer) {
let pointInView = recognizer.location(in: view)
let pointInScene = convertPoint(fromView: pointInView)
switch recognizer.state {
case .began:
//Start dragging on the ball, or ignore this gesture
isPanning = atPoint(pointInScene) == ball
case .changed:
//Move the ball
guard isPanning else {
return
}
let translation = recognizer.translation(in: view)
ball.position.x -= translation.x
ball.position.y += translation.y
recognizer.setTranslation(.zero, in: view)
case .cancelled, .ended:
//Stop dragging
isPanning == false
default:
break
}
我在GitHub上有完整的示例:https://github.com/joshuajhomann/AngryBirdsClone