SKAction.moveTo 根本不工作
SKAction.moveTo not working at all
我在使用 Sprite-kit 和 Swift 1.2 时遇到了一个奇怪的问题。我有以下代码。 fingerSprite
正确显示在屏幕中间。
然而,当我应用 moveTo
操作时,没有任何反应。我对 Sprite-Kit 和 Swift 很陌生,所以我可能会做一些完全愚蠢的事情,但请多多包涵。
我做错了什么?
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
tutorialStepReset()
var bounceLabels = SKAction.sequence([
SKAction.scaleTo(1.3, duration: 0.5),
SKAction.scaleTo(1.0, duration: 0.5)
])
var fingerPoint = CGPoint(x: self.size.width/2, y: self.size.height/2)
var fingerSprite = SKSpriteNode(imageNamed: "finger.png")
switch tutorialGuideIndex {
case 0: self.runAction( SKAction.runBlock({
self.labelScore.runAction(SKAction.repeatActionForever(bounceLabels))
}))
case 1: self.runAction( SKAction.runBlock({
self.labelUntilNextLevel.runAction(SKAction.repeatActionForever(bounceLabels))
}))
case 2: self.runAction( SKAction.runBlock({
self.labelCurrentLevel.runAction(SKAction.repeatActionForever(bounceLabels))
}))
case 3:
fingerSprite.position = fingerPoint
fingerSprite.zPosition = labelZPosition
self.addChild(fingerSprite)
case 4:
//move finger & draw line
fingerPoint.x = fingerPoint.x+20
fingerPoint.y = fingerPoint.y+20
fingerSprite.runAction(SKAction.scaleTo(2.0, duration: 4.0))
fingerSprite.runAction(SKAction.moveTo(fingerPoint, duration: 4.0))
tutorialGuideIndex++
}
每次触摸都会创建一个 new
精灵,并且仅在 case 3
中将其添加到节点 而无需 运行 移动动作。
当到达 case 4
时,您只需 运行 对新精灵实例的操作而不将其添加到节点,因此它永远不会显示。
将精灵添加到节点后立即使用移动动作
case 3:
fingerSprite.position = fingerPoint
fingerSprite.zPosition = labelZPosition
self.addChild(fingerSprite)
fingerSprite.runAction(SKAction.moveTo(fingerPoint, duration: 4.0))
我还注意到您尝试 运行 对同一个精灵执行两个操作:
fingerSprite.runAction(SKAction.scaleTo(2.0, duration: 4.0))
fingerSprite.runAction(SKAction.moveTo(fingerPoint, duration: 4.0))
为了 运行 一个接一个地进行操作,您应该按顺序操作:
fingerSprite.runAction(SKAction.sequence([
SKAction.scaleTo(2.0, duration: 4.0),
SKAction.moveTo(fingerPoint, duration: 4.0)]));
如果您需要这些操作来 运行 并行使用 group
操作而不是 sequence
对我来说,解决方案非常简单。由于某种原因,精灵暂停,您必须将其设置为 false。
newTile.isPaused = false
我在使用 Sprite-kit 和 Swift 1.2 时遇到了一个奇怪的问题。我有以下代码。 fingerSprite
正确显示在屏幕中间。
然而,当我应用 moveTo
操作时,没有任何反应。我对 Sprite-Kit 和 Swift 很陌生,所以我可能会做一些完全愚蠢的事情,但请多多包涵。
我做错了什么?
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
tutorialStepReset()
var bounceLabels = SKAction.sequence([
SKAction.scaleTo(1.3, duration: 0.5),
SKAction.scaleTo(1.0, duration: 0.5)
])
var fingerPoint = CGPoint(x: self.size.width/2, y: self.size.height/2)
var fingerSprite = SKSpriteNode(imageNamed: "finger.png")
switch tutorialGuideIndex {
case 0: self.runAction( SKAction.runBlock({
self.labelScore.runAction(SKAction.repeatActionForever(bounceLabels))
}))
case 1: self.runAction( SKAction.runBlock({
self.labelUntilNextLevel.runAction(SKAction.repeatActionForever(bounceLabels))
}))
case 2: self.runAction( SKAction.runBlock({
self.labelCurrentLevel.runAction(SKAction.repeatActionForever(bounceLabels))
}))
case 3:
fingerSprite.position = fingerPoint
fingerSprite.zPosition = labelZPosition
self.addChild(fingerSprite)
case 4:
//move finger & draw line
fingerPoint.x = fingerPoint.x+20
fingerPoint.y = fingerPoint.y+20
fingerSprite.runAction(SKAction.scaleTo(2.0, duration: 4.0))
fingerSprite.runAction(SKAction.moveTo(fingerPoint, duration: 4.0))
tutorialGuideIndex++
}
每次触摸都会创建一个 new
精灵,并且仅在 case 3
中将其添加到节点 而无需 运行 移动动作。
当到达 case 4
时,您只需 运行 对新精灵实例的操作而不将其添加到节点,因此它永远不会显示。
将精灵添加到节点后立即使用移动动作
case 3:
fingerSprite.position = fingerPoint
fingerSprite.zPosition = labelZPosition
self.addChild(fingerSprite)
fingerSprite.runAction(SKAction.moveTo(fingerPoint, duration: 4.0))
我还注意到您尝试 运行 对同一个精灵执行两个操作:
fingerSprite.runAction(SKAction.scaleTo(2.0, duration: 4.0))
fingerSprite.runAction(SKAction.moveTo(fingerPoint, duration: 4.0))
为了 运行 一个接一个地进行操作,您应该按顺序操作:
fingerSprite.runAction(SKAction.sequence([
SKAction.scaleTo(2.0, duration: 4.0),
SKAction.moveTo(fingerPoint, duration: 4.0)]));
如果您需要这些操作来 运行 并行使用 group
操作而不是 sequence
对我来说,解决方案非常简单。由于某种原因,精灵暂停,您必须将其设置为 false。
newTile.isPaused = false