【问题标题】:swift spritekit - cannot invoke 'runAction' with an argument of type 'SKAction!'swift spritekit - 无法使用“SKAction!”类型的参数调用“runAction”
【发布时间】:2014-12-30 02:23:38
【问题描述】:

我试图让 SKSpriteNode 在屏幕上弹跳,但是当我运行它时,我得到一个错误(在第一行):

无法使用“SKAction!”类型的参数调用“runAction”!

我不知道是什么原因造成的。我在下面粘贴了整个 runAction 代码:

self.runAction(SKAction.sequence(
        [ SKAction.repeatAction(SKAction.sequence(
            [
                {self.updatePath()},
                SKAction.followPath(path.CGPath, duration: 3.0)
            ]), count: numberOfBounces),
            {actionMoveDone()}
        ]
    ))

提前致谢!

【问题讨论】:

    标签: ios swift sprite-kit skaction


    【解决方案1】:

    更改动作的参数将不会影响动作一旦开始。因此,您的操作将在执行一系列操作期间重复使用相同的原始路径。此外,您在self 上运行动作,我假设它是SKScene 子类,而followPath 动作通常在精灵上运行。

    如果您希望精灵在每次迭代期间遵循不同的路径,则需要创建一个新动作。一种方法是创建一个函数来更新路径,创建一个新动作,然后在当前动作完成时调用自己。例如,

    func createAction() {
        updatePath()
        sprite.runAction(SKAction.followPath(path.CGPath, asOffset: false, orientToPath: true, duration: 3.0),
            completion: {
                if (++self.count < numberOfBounces) {
                    self.createAction()
                }
                else {
                  // Run this after running the action numberOfBounces times
                  self.actionMoveDone()
               }
            }
        )
    }
    

    并通过调用函数开始系列

    createAction()
    

    【讨论】:

      【解决方案2】:

      你的代码有点乱。

      首先,您并不真正需要第一个序列。使用完成块更有意义。

      其次,为什么你的内部序列中有花括号? self.updatePath() 是 SKAction 吗?一个序列只能是一个 SKActions 数组。如果是 SKAction 你不需要任何花括号,否则你需要使用 SKAction.runBlock({})

      所以根据你的代码..我想这就是你想要做的..

      self.runAction(
          SKAction.repeatAction(
              SKAction.sequence([
                  // guessing self.updatePath isnt an SKAction, but I don't know
                  SKAction.runBlock({ self.updatePath() }),
      
                  SKAction.followPath(path.CGPath, duration: 3.0)
      
              ]), count: numberOfBounces),
          completion:{
              // also not sure if this is an SKAction, or something else
              actionMoveDone()
      })
      

      【讨论】:

        猜你喜欢
        • 2016-04-08
        • 2015-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-20
        • 2016-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多