尝试使用变量更改 SKSpriteNode 图像
Trying to change an SKSpriteNode image using a variable
所以我最近开始使用一个结构来保存定义我的成就的变量,以便更容易访问。如下所示:
struct Achieve {
var aName:String = ""
var aDes:String = ""
var aImage:String = ""
var aAmount:Int = 0
var aRequired:Int = 0
}
所以我定义了一个名为 'Ach1' 的变量,如下所示:
var Ach1 = Achieve(aName: "No. Games", aDes: "Games Played", aImage: "locked", aAmount: 0, aRequired: 10)
然后我使用以下函数创建了一个 SKSpriteNode:
func generateShopItems (location: CGPoint, page:SKSpriteNode, tex: String) -> SKSpriteNode {
let node = SKSpriteNode(imageNamed: tex)
node.position = location
page.addChild(node)
return node
}
然后我在下面的另一个函数中定义 SKSpritenode 时使用 Ach1 变量的 aImage 属性 作为 tex 字符串
Achievements.append(generateShopItems(CGPointMake(-120, 200), page:(page1ScrollView), tex: Ach1.aImage))
第一次玩 运行 时,纹理效果很好,但是当我在 touches 方法中更改 Ach1 变量 aImage 属性 时,我无法更改图像只是保持不变。
} else if (node == Achievements[7]) {
Ach1.aImage = "diamondicon"
print("working")
}
我需要能够在玩游戏时更改 SKSpriteNode 的图像。有人可以告诉我我做错了什么吗?
编辑
var Ach1 = Achieve(node: SKSpriteNode?, aName: "No. Games", aDes: "Games Played", aImage: "locked", aAmount: 0, aRequired: 10)
这是我首先想到的解决方案。它可能不是最好的,但也不错。
在您的 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
现在,当您更改 Ach1
的 aImage
属性 时,节点的纹理也会更改。
所以我最近开始使用一个结构来保存定义我的成就的变量,以便更容易访问。如下所示:
struct Achieve {
var aName:String = ""
var aDes:String = ""
var aImage:String = ""
var aAmount:Int = 0
var aRequired:Int = 0
}
所以我定义了一个名为 'Ach1' 的变量,如下所示:
var Ach1 = Achieve(aName: "No. Games", aDes: "Games Played", aImage: "locked", aAmount: 0, aRequired: 10)
然后我使用以下函数创建了一个 SKSpriteNode:
func generateShopItems (location: CGPoint, page:SKSpriteNode, tex: String) -> SKSpriteNode {
let node = SKSpriteNode(imageNamed: tex)
node.position = location
page.addChild(node)
return node
}
然后我在下面的另一个函数中定义 SKSpritenode 时使用 Ach1 变量的 aImage 属性 作为 tex 字符串
Achievements.append(generateShopItems(CGPointMake(-120, 200), page:(page1ScrollView), tex: Ach1.aImage))
第一次玩 运行 时,纹理效果很好,但是当我在 touches 方法中更改 Ach1 变量 aImage 属性 时,我无法更改图像只是保持不变。
} else if (node == Achievements[7]) {
Ach1.aImage = "diamondicon"
print("working")
}
我需要能够在玩游戏时更改 SKSpriteNode 的图像。有人可以告诉我我做错了什么吗?
编辑
var Ach1 = Achieve(node: SKSpriteNode?, aName: "No. Games", aDes: "Games Played", aImage: "locked", aAmount: 0, aRequired: 10)
这是我首先想到的解决方案。它可能不是最好的,但也不错。
在您的 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
现在,当您更改 Ach1
的 aImage
属性 时,节点的纹理也会更改。