2015-03-22 3 views
0

У меня есть объект, который включает в себя узел SpriteKit:Изменение текстуры узла SpriteKit

class PauseButton{ 
    var playTexture: SKTexture = SKTexture.init(imageNamed: "play") 
    var pauseTexture: SKTexture = SKTexture.init(imageNamed: "pause") 
    var node: SKSpriteNode 

    init(){ 
     self.node = SKSpriteNode(texture: pauseTexture) 
    } 
} 

И я пытаюсь изменить свою текстуру через SKAction, но ничего не происходит:

pauseImage.node.runAction(SKAction.setTexture(pauseImage.playTexture)) 

I также попытался запустить self.scene!.view!.setNeedsDisplay() безрезультатно.

+0

Единственное, что нужно иметь в виду, заключающееся в изменении текстуры напрямую или изменении текста с использованием SKAction, - это время. SKActions ставятся в очередь и выполняются в следующем кадре, а изменение свойства текстуры должно вступить в силу немедленно. setNeedsDisplay здесь не требуется. Узлы представлены сценой, а не точкой зрения. Существует большая разница в том, как визуализируются представления и узлы. – Whirlwind

ответ

1

Не используйте для этого SKAction. Вместо этого используйте свойство texture. Это точно так же, как если вы используете SKAction, но гораздо проще в использовании и понять:

pauseImage.node.texture = pauseImage.playTexture 

Также вы не должны использовать SKTexture.init просто использовать:

SKTexture(imageNamed: "play") 
+0

Я уже пытался изменить его, просто сделав pauseImage.node.texture = pauseImage.playTexture раньше, но ничего не появилось. Извините, что не сказал этого. И изменил .init, спасибо. – vale

1

Try:

var playTexture: SKTexture = SKTexture.init(imageNamed: "play") 
    var pauseTexture: SKTexture = SKTexture.init(imageNamed: "pause") 
    var node: SKSpriteNode 
    let changeTextures = SKAction.animateWithTextures([pauseTexture], timePerFrame: 0.1) 
    node.runAction(changeTextures)