2014-12-25 2 views
0

Я пытаюсь запрограммировать небольшую игру, используя быстрый. Я переводил какой-то старый код спрайта-кода obj-C и не нашел, как перевести этот код. В obj-C у SKACtion есть член, называемый hasActions, который сообщает вам, содержит ли vars действие, но в swift кажется, что свойство theses не существует, а также нет способа выполнить одно и то же действие.Проверьте, есть ли в SKAction действие (быстрое)

Оригинальный код 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 является массивом и не бросать какие-либо ошибки. Точная ошибка: «Тип» SkAction не соответствует протоколу BooleanType '

Заранее спасибо.

ответ

1

Вам нужно написать

уаг animAction: SKAction! = player.actionForKey (animationKey)

if animAction! = nil || animationFrames.count < 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

вар узел = SKNode()

node.hasActions()

+2

'animAction' должен быть дополнительный тип, чтобы проверить его на' nil'. Вы хотите проверить 'if animAction! = Nil ...' – vacawama

+0

Я отредактировал == to! =, Извините за это. Переменная не обязательно должна быть опциональной, чтобы проверить ее на нуль. –

+0

Переменная не может быть 'nil', если она не является необязательной. – vacawama

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") 
} 
Смежные вопросы