【问题标题】:How do I scale SKNodes when you zoom in or out?放大或缩小时如何缩放 SKNode?
【发布时间】:2020-04-28 21:30:38
【问题描述】:

我已经实现了缩放功能,但是我用来移动玩家的节点,指向玩家移动方向的箭头,保持相同的大小,我不知道如何按比例缩放它们,所以如果我放大时,按钮会变小并靠近播放器以留在屏幕上,反之亦然。

这是我编写的允许缩放的代码:

@objc func handlePinch(sender: UIPinchGestureRecognizer) {
    guard sender.view != nil else { return }

    if sender.state == .began || sender.state == .changed {
        sender.view?.transform = (sender.view?.transform.scaledBy(x: sender.scale, y: sender.scale))!
        sender.scale = 1.0
    }
}
let pinch = UIPinchGestureRecognizer(target: self, action: #selector(handlePinch(sender:)))
view.addGestureRecognizer(pinch)

【问题讨论】:

    标签: swift sprite-kit zooming sknode


    【解决方案1】:

    你在使用 SpriteKit 吗?

    如果是这样,您可能可以在相机节点规模上实现“缩放”功能:https://developer.apple.com/documentation/spritekit/skcameranode/getting_started_with_a_camera

    @objc func handlePinch(sender: UIPinchGestureRecognizer) {
        guard sender.view != nil else { 
            return 
        }
    
        if sender.state == .began || sender.state == .changed {
            self.camera.xScale = sender.scale
            self.camera.yScale = sender.scale
        }
    }
    

    Apple 的文档说:

    因为相机是一个节点,所以您可以像定义任何其他节点一样定义它在场景中的位置。动作、物理和 GameplayKit 行为也可以应用于相机节点。当使用相机节点渲染场景时,会发生以下情况: 渲染场景,使相机节点的原点位于场景的中间。 相机节点的 xScale、yScale 和 zRotation 属性的倒数应用于场景中的所有节点。

    您可能应该反转发件人比例值:self.camera.xScale = -sender.scale

    【讨论】:

    • 我试图反转 sender.scale,但按钮只是反转了它们的位置,但它们保持相同的大小并且在您最初触摸屏幕后没有移动,当它没有反转时它不会什么都不做
    • 我在我的帖子中假设你有一个摄像头self.camera 它是用来渲染你的场景的同一个摄像头?
    • 我有一台跟随播放器的摄像机,我试过用那个,我也试过用一个没有连接到播放器的,只有场景,两者都不起作用跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2019-05-28
    • 2016-05-24
    • 2013-11-09
    相关资源
    最近更新 更多