我正在使用 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/