我试图使用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;
提前致谢。
答案 0 :(得分:1)
你需要写
var animAction:SKAction! = player.actionForKey(animationKey)
如果animAction!= nil || animationFrames.count&lt; 1 {
return
}
错误发生在 animAction 上,而不是animationFrames。
对于hasActions,它仍然存在于Swift中
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")
}