我正在使用Swift / SpriteKit并在SKScene上创建了一张地图的宽图像。我在代码中执行此操作并希望让用户拖动他们的手指来平移这个额外的宽地图。可以把它想象成一个幻想土地的旧学校RPG地图。我能够实现平移,但图像最初位于屏幕的中心(意味着用户可以向左或向右平移)。
问题是,我希望它们一直“开始”,所以它们最初只能向右平移以查看地图的另一侧(它们只能水平平移)。
有没有办法以这种方式在宽幅图像上开始初始位置?
$wp_query->query_vars($aVars)
我尝试像这样改变下面地图的位置
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));
(所以使用min代替中间)但是这只是在左边创建了很多灰色空间(在平移之后它很好地捕捉到位置,但我不想让用户必须这样做)。
有什么想法吗?
谢谢!
答案 0 :(得分:0)
嗯,也许这不是最好的方法,但这就是我解决它的方法:
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中添加了这段代码,就在我第一次将背景节点添加到屏幕上之后。
..所以我的想法是,只需设置约束,然后将图像荒谬地移到左边,约束就会阻止它走得太远。
..然后用户可以正常平移。这有效!