【问题标题】:SKAction.moveTo not working at allSKAction.moveTo 根本不工作
【发布时间】:2015-08-23 23:12:32
【问题描述】:

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

}

【问题讨论】:

  • 在哪里将精灵添加到包含节点以及何时运行该动作?从您发布的代码中,精灵未添加到任何节点...
  • 好点 giorashc!我重构了这个例子。基本上我是在接触开始的,方法。
  • 贴出fingerSprite相关的整个方法

标签: ios swift sprite-kit skaction


【解决方案1】:

在每次触摸时,您都会创建一个 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

【讨论】:

  • 你的意思是group 不是spawn
  • 没有什么是愚蠢的。我们都曾在某个时候问过自己的一个有效问题;)
【解决方案2】:

对我来说,解决方案非常简单。由于某种原因,精灵被暂停,您必须将其设置为 false。

newTile.isPaused = false

【讨论】:

    猜你喜欢
    • 2016-10-29
    • 2018-02-10
    • 2017-03-19
    • 2013-09-20
    • 2013-11-08
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多