【问题标题】:Trying to change an SKSpriteNode image using a variable尝试使用变量更改 SKSpriteNode 图像
【发布时间】:2016-08-19 07:40:00
【问题描述】:

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

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)

【问题讨论】:

    标签: swift swift2 skspritenode


    【解决方案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
    

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

    【讨论】:

    • @Astrum 哦,我忘了。只需输入nil
    • 感谢您似乎完成了这项工作。在不创建节点变量的情况下会有另一种方法吗?像也许使用更新功能来改变图像?
    • 嗯,你可以。但这对我来说似乎有点过分。 update 函数每秒调用几次,但纹理只需要在 aImage 更改时更改。 @Astrum
    • 我之所以问,是因为我将来会有不止一个成就 SKspritenode,并且想要一种更简单的方法来更新所有这些上的图像。
    猜你喜欢
    • 2023-03-28
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多