gpt4 book ai didi

swift - 尝试使用变量更改 SKSpriteNode 图像

转载 作者:行者123 更新时间:2023-11-28 06:36:12 25 4
gpt4 key购买 nike

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

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

现在,当您更改 Ach1aImage 属性时,节点的纹理也应该更改。

关于swift - 尝试使用变量更改 SKSpriteNode 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39033593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com