gpt4 book ai didi

swift - SpriteKit 中的 UIPanGesture

转载 作者:行者123 更新时间:2023-11-30 10:59:02 26 4
gpt4 key购买 nike

我正在尝试制作一个球,SKSpriteNode,向所有方向移动,包括对角线和所有其他方向。 UIGesture 不能使用它,所以我需要使用 UIPanGesture,但我不知道如何将它实现到 SpriteKit 文件中。这是我到目前为止所拥有的。有什么帮助吗?球 Sprite 节点称为“球”。

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)
}

最佳答案

请注意,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

关于swift - SpriteKit 中的 UIPanGesture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53615703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com