我正在使用 Swift 3、SpriteKit 和 Xcode。
所以我有一个名为 backgroundNode 的节点,我将游戏的每个节点都附加到这个 backgroundNode。
现在我希望能够通过捏合手势来放大我的游戏,并且当我放大以在我的游戏中导航时。
我看到了两种可能性:
- 替换背景节点并更改其比例以放大和缩小,
- 使用 SKCameraNode
你认为最好的选择是什么?
我已经尝试过第一个选项,但是缩放手势非常复杂,就像我想缩放时将背景节点向上缩放一样,锚点位于 0;0 而不是 0.5;0.5 所以它不会在检测到捏合手势的地方缩放,但从右下角,我不知道你是否明白我的意思。
对于第二个选项,我无法在没有故障效果的情况下移动相机,也许我的代码是错误的,但它看起来确实是正确的。
你能帮助我吗 ?
编辑:所以我使用SKCameraNode
and让它工作UIPanGestureRecognizer
,这里是代码:
var cam: SKCameraNode!
let panGesture = UIPanGestureRecognizer()
override func didMove(to view: SKView)
{
cam = SKCameraNode()
camera = cam
cam.position = CGPoint(x: playableRect.midWidth, y: playableRect.midHeight)
addChild(cam)
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(GameScene.panFunction))
view.addGestureRecognizer(panGesture)
}
func panFunction(pan : UIPanGestureRecognizer)
{
let deltaX = pan.translation(in: view).x
let deltaY = pan.translation(in: view).y
cam.position.x -= deltaX
cam.position.y += deltaY
pan.setTranslation(CGPoint(x: 0, y: 0), in: view)
}
现在我正在努力使用Zoom。我尝试使用UIPinchGestureRecognizer
,但效果不如平移手势,这是我尝试过的:
var firstPinch: CGFloat = 0
var pinchGesture = UIPinchGestureRecognizer()
let panGesture = UIPanGestureRecognizer()
var cam: SKCameraNode!
override func didMove(to view: SKView)
{
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(GameScene.pinchFunction))
view.addGestureRecognizer(pinchGesture)
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(GameScene.panFunction))
view.addGestureRecognizer(panGesture)
}
func pinchFunction(pinch : UIPinchGestureRecognizer)
{
if UIGestureRecognizerState.began == pinch.state
{
firstPinch = pinch.scale
}
actualPinch = pinch.scale
cam.xScale -= actualPinch - firstPinch
cam.yScale -= actualPinch - firstPinch
}
你会怎么做?