ios - 平移 - 平移之前图像的初始位置

标签 ios swift sprite-kit panning

我正在使用 Swift/SpriteKit 并在 SKScene 上创建了 map 的宽图像。我正在用代码完成这一切,并希望让用户拖动手指来平移这张超宽的 map 。可以将其想象为幻想世界的老式 RPG map 。我能够实现平移,但图像最初位于屏幕中央(这意味着用户可以向左或向右平移)。

问题是,我希望它们一直向左“开始”,所以它们最初只能向右平移才能看到 map 的另一侧(它们只能水平平移)。

有没有办法以这种方式在宽图像上开始初始位置?

  override func didMoveToView(view: SKView) {
            self.scaleMode = SKSceneScaleMode.Fill;
            background = SKSpriteNode(imageNamed: "map")
            background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
            background.blendMode = .Replace
            background.zPosition = -1

            addChild(background)

            let pan = UIPanGestureRecognizer(target: self, action: "dragScene:")
            pan.minimumNumberOfTouches = 1;
            self.view!.addGestureRecognizer(pan)
        }
       func dragScene(gesture: UIPanGestureRecognizer)
        {

            let xRange = SKRange(lowerLimit: 250,upperLimit: 764)
            let yRange = SKRange(lowerLimit:0,upperLimit:size.height)
            background.constraints = [SKConstraint.positionX(xRange,y:yRange)]

            let trans = gesture.translationInView(self.view)
            let moveMap = SKAction.moveBy(CGVector(dx: trans.x * 0.08, dy: 0), duration: 0.0)
            background.runAction(moveMap)


        }

我尝试像这样更改下面 map 的位置

CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));

CGPointMake(CGRectGetMinX(self.frame), CGRectGetMidY(self.frame));

(因此使用 min 而不是 middle),但这只是在左侧创建了很多灰色空间(平移后它很好地卡入到位,但我不想让用户必须这样做)。

有什么想法吗?

谢谢!

最佳答案

好吧,也许这不是最好的方法,但我是这样解决的:

 let xRange = SKRange(lowerLimit: 250,upperLimit: 764)
        let yRange = SKRange(lowerLimit:0,upperLimit:size.height)
        background.constraints = [SKConstraint.positionX(xRange,y:yRange)]

        background.runAction(SKAction.moveBy(CGVector(dx: 2000, dy: 0), duration: 0.0))

我在 didMoveToView 中添加了这段代码,就在我第一次将背景节点添加到屏幕上之后。

..所以我们的想法是,只需设置约束,然后将图像向左移动很远,约束将防止它走得太远。

..然后用户可以正常平移。这有效!

关于ios - 平移 - 平移之前图像的初始位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36243611/

相关文章:

ios - 使用钥匙串(keychain)提高 iOS 应用程序安全性

ios14 Xcode 12 - 触摸 SwiftUI 对象时 Sprite 不显示,但触摸 SKScene 时可以工作

ios - swift 的新手,我的程序会在按下打开时崩溃

ios - 制作具有功能的独立类并在 InterfaceController 类中使用它

ios - 快速有效地重用类

ios - Swift 3 Game Center Leaderboard 不保存分数的值

ios - 从本地化字符串设置核心数据值

ios - 折叠隐藏的 UIButton

ios - 无法将类型 'NSMutableArray' 的值转换为预期的参数类型 '[SKTexture]'

swift - 我如何在 SpriteKit 中从顶部编码现在从侧面出现的产卵球?