平移 - 平移前图像的初始位置
Panning - Initial position of my image before panning
我正在使用 Swift/SpriteKit 并在 SKScene 上创建了地图的宽图像。我在代码中完成这一切,并想让用户拖动他们的手指来平移这张超宽地图。把它想象成幻想世界的老式角色扮演游戏地图。我能够实现平移,但图像最初位于屏幕中央(这意味着用户可以向左或向右平移)。
问题是,我希望他们 "start" 一直向左,所以他们最初只能向右平移以查看地图的另一侧(他们只能水平平移)。
有没有办法以这种方式在宽幅图像上启动初始位置?
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)
}
我试过像这样改变下面地图的位置
CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
至
CGPointMake(CGRectGetMinX(self.frame), CGRectGetMidY(self.frame));
(因此使用 min 而不是 middle)但这只是在左侧创建了很多灰色 space(平移后它会很好地卡入到位,但我不想让用户必须那样做)。
有什么想法吗?
谢谢!
好吧,也许这不是最好的方法,但我是这样解决的:
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 中添加了这段代码,就在我第一次将背景节点添加到屏幕之后。
..所以想法是,只需设置约束,然后将图像向左移动到荒谬的远,约束将防止它走得太远。
..然后用户可以正常平移。这奏效了!
我正在使用 Swift/SpriteKit 并在 SKScene 上创建了地图的宽图像。我在代码中完成这一切,并想让用户拖动他们的手指来平移这张超宽地图。把它想象成幻想世界的老式角色扮演游戏地图。我能够实现平移,但图像最初位于屏幕中央(这意味着用户可以向左或向右平移)。
问题是,我希望他们 "start" 一直向左,所以他们最初只能向右平移以查看地图的另一侧(他们只能水平平移)。
有没有办法以这种方式在宽幅图像上启动初始位置?
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)
}
我试过像这样改变下面地图的位置
CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
至
CGPointMake(CGRectGetMinX(self.frame), CGRectGetMidY(self.frame));
(因此使用 min 而不是 middle)但这只是在左侧创建了很多灰色 space(平移后它会很好地卡入到位,但我不想让用户必须那样做)。
有什么想法吗?
谢谢!
好吧,也许这不是最好的方法,但我是这样解决的:
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 中添加了这段代码,就在我第一次将背景节点添加到屏幕之后。
..所以想法是,只需设置约束,然后将图像向左移动到荒谬的远,约束将防止它走得太远。
..然后用户可以正常平移。这奏效了!