数组更改图像中的 SKSpriteNode

Posted

技术标签:

【中文标题】数组更改图像中的 SKSpriteNode【英文标题】:SKSpriteNode in array change image 【发布时间】:2017-10-17 08:29:12 【问题描述】:

我在 didMove(to view:SKView) 的 SKSPriteNode 数组中使用了几个 SKSpriteNode

enumerateChildNodes(withName: "//*")  (node, stop) in
    if let spriteNode = node as? SKSpriteNode
            if let nodeName = node.name
                if nodeName.hasSuffix("Button")
                    self.buttons.append(spriteNode)

                
            
        
    

现在使用我的 NSCoding 的结果我想更改我的按钮图像

    for node in self.buttons
        if let name = node.name
            if name.hasSuffix("Button")
                let letter = name.replacingOccurrences(of: "Button", with: "", options: .regularExpression)
                if let number = self.gameResult[letter]
                    switch number
                    case 1:
                        node = SKSpriteNode(imageNamed: "\(letter)Button-Bronze")
                    case 2:
                        node = SKSpriteNode(imageNamed: "\(letter)Button-Silver")
                    case 3:
                        node = SKSpriteNode(imageNamed: "\(letter)Button-Gold")
                    default:
                        node = SKSpriteNode(imageNamed: "\(letter)Button-Bronze")
                    
                
            
        
    

似乎数组中的所有节点都被允许,我无法更改我的 SKSpritNode 按钮中的图像。

我该怎么做?

你能帮帮我吗?

【问题讨论】:

【参考方案1】:

任何时候你枚举一个集合(for node in array 等),用于枚举的属性自动是一个let。整个集合本身也是不可变的,因为在枚举集合的同时更改集合可能会产生无法预料的后果。

将节点复制到一个新数组,根据需要更改节点的属性,然后交换数组。

你不能通过enumeratechildNodes(withName:更改节点的图像有什么原因吗?

【讨论】:

谢谢。新数组似乎是我的问题的超级解决方案。关于 enumaratechildNodes 我试过但 spriteNode 作为? SKSpriteNode 也让。你将如何在枚举中做到这一点?谢谢大家的帮助 你可以把类似var myNode = spriteNode的东西(假设spriteNode是枚举变量)给自己一个可变的精灵节点。 太棒了!像魅力一样工作。极好的。非常感谢

以上是关于数组更改图像中的 SKSpriteNode的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 SKTexture 的情况下更改 didBeginContact 中的 SKSpriteNode 大小和颜色?

Swift - 使用纹理数组更改 SKSpriteNode 纹理

从 SKSpriteNode 类实例访问 GameScene 中的数组?

SKSpriteNode moveTo:X 用于数组中的所有内容

SkSpriteNode在通用游戏中的位置

在 Xcode 中的 SKSpriteNode 中设置 LabelNode 的文本