检查SKAction是否包含动作(swift)

时间:2014-12-25 12:17:43

标签: swift sprite-kit skaction

我试图使用swift编写一个小游戏。我正在翻译一些旧的obj-C sprite-kit代码,并且没有找到如何翻译此代码。在obj-C中,SKACtion有一个名为hasActions的成员,它告诉你vars是否包含一个动作,但是在swift中似乎这些属性不存在,而且也没有方法可以做同样的动作。

原始obj-C代码:

SKAction *animAction = [self.player actionForKey:animationKey];

    // If this animation is already running or there are no frames we exit
    if ( animAction || animationFrames.count < 1 )
    {
        return;
    }

Swift代码

var animAction : SKAction = player.actionForKey(animationKey)!

// If this animation is already running or there are no frames we exit
if animAction || animationFrames.count < 1
{
    return
}

变量animationFrames.count是一个数组,不会抛出任何错误。 确切的错误是&#39;类型&#39; SkAction不符合协议BooleanType&#39;

提前致谢。

2 个答案:

答案 0 :(得分:1)

你需要写

  

var animAction:SKAction! = player.actionForKey(animationKey)

     

如果animAction!= nil || animationFrames.count&lt; 1 {

return 
     

}

错误发生在 animAction 上,而不是animationFrames。

对于hasActions,它仍然存在于Swift中

https://developer.apple.com/library/mac/documentation/SpriteKit/Reference/SKNode_Ref/index.html#//apple_ref/occ/instm/SKNode/hasActions

  

var node = SKNode()

     

node.hasActions()

答案 1 :(得分:0)

使用 Swift 2.x ,您可以轻松完成:

public extension SKNode {
    public func actionForKeyIsRunning(key: String) -> Bool {
        return self.actionForKey(key) != nil ? true : false
    }
}

你可以写一下例如:

var myHero: SKSpriteNode!
...
if myHero.actionForKeyIsRunning("moveLeft") {
   // my character moving to the left
   print("moving to the left")
}