尝试使用变量更改SKSpriteNode图像

时间:2016-08-19 07:40:01

标签: swift swift2 skspritenode

所以我最近开始使用一个结构来保存定义我的成就的变量,以便更容易访问。如下所示:

gawk '/bbbbbbb/ { getline; print $0 }' file

所以我定义了一个名为'Ach1'的变量,如下所示:

struct Achieve {

var aName:String = ""
var aDes:String = ""
var aImage:String = ""
var aAmount:Int = 0
var aRequired:Int = 0

}

然后我使用以下函数创建了一个SKSpriteNode:

var Ach1 = Achieve(aName: "No. Games", aDes: "Games Played", aImage: "locked", aAmount: 0, aRequired: 10)

然后我在另一个函数中定义SKSpritenode时使用了Ach1变量的aImage属性作为tex字符串

func generateShopItems (location: CGPoint, page:SKSpriteNode, tex: String) -> SKSpriteNode {

        let node = SKSpriteNode(imageNamed: tex)
        node.position = location
        page.addChild(node)
        return node
}

第一次运行游戏时纹理很好,但是当我在触摸方法中更改Ach1变量aImage属性时,我无法更改图像,它保持不变。

Achievements.append(generateShopItems(CGPointMake(-120, 200), page:(page1ScrollView), tex: Ach1.aImage))

我需要能够在玩游戏时更改SKSpriteNode的图像。有人可以告诉我我做错了吗?

修改

} else if (node == Achievements[7]) {

        Ach1.aImage = "diamondicon"
         print("working")

}

1 个答案:

答案 0 :(得分:1)

这是我首先想到的解决方案。它可能不是最好的,但它也不错。

Achieve结构中,添加名为node的属性:

var node: SKSpriteNode?

并将aImage属性更改为如下所示:

var aImage: String = "" {
    didSet {
        node?.texture = SKTexture(imageNamed: aImage)
    }
}

现在,当您生成节点时,请替换它:

Achievements.append(generateShopItems(CGPointMake(-120, 200), 
    page:(page1ScrollView), tex: Ach1.aImage))

用这个

var node = generateShopItems(CGPointMake(-120, 200), 
    page:(page1ScrollView), tex: Ach1.aImage)
Achievements.append(node)
Ach1.node = node

现在,当您更改aImage的{​​{1}}属性时,节点的纹理也应该更改。