gpt4 book ai didi

swift - 如何根据名称编辑 Sprite ?

转载 作者:行者123 更新时间:2023-11-30 10:08:37 25 4
gpt4 key购买 nike

所以在我的游戏中我有一个生成硬币的函数,它们被命名为“硬币”,现在我无法引用硬币,例如杀死它们或移动它们。所以我想做的是创建一个引用,以便能够在我的代码中使用它来更改其 zPosition。

每次我运行我的应用程序并运行一个使用coinRef的函数时[例如。更改 zPosition],应用程序崩溃并出现错误:

'Thread 1 EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)'

这是我的代码:

let coinRef: SKSpriteNode = self.childNodeWithName("coin")! as! SKSpriteNode

func hideCoins() {
coinRef.zPosition = -1
}
func showCoins() {
coinRef.zPosition = 101
}
func killCoins() {
coinRef.removeFromParent()
}

最佳答案

看看你写的

So in my game i have a function that spawns coins,they are given the name "coin"

您的场景中似乎有多个硬币。正如你可以想象的那样,一个名字 coin不足以明确识别超过 1 个硬币:)

我们需要一种方法来识别多个硬币。

1。硬币类

class Coin: SKSpriteNode {
private static var lastID: UInt = 0
let id:UInt

init() {
self.id = Coin.lastID++
let texture = SKTexture(imageNamed: "coin")
super.init(texture: texture, color: UIColor.clearColor(), size: texture.size())
self.name = "coin"
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

如您所见 Coin有一个内部机制来分配新的 id到每个新实例。您可以使用这个id引用coins在你的场景中。

let coin0 = Coin()
coin0.id // 0

let coin1 = Coin()
coin1.id // 1

let coin2 = Coin()
coin2.id // 2

2。管理您的硬币

class GameScene: SKScene {

func retrieveCoin(id:UInt) -> Coin? {
return children.filter { ($0 as? Coin)?.id == id }.first as? Coin
}

func hideCoin(id:UInt) {
retrieveCoin(id)?.hidden = true
}

func showCoin(id:UInt) {
retrieveCoin(id)?.hidden = true
}

func deleteCoin(id:UInt) {
retrieveCoin(id)?.removeFromParent()
}
}

retrieveCoin方法返回(如果存在)具有指定 id 的硬币。否则nil已返回。

hideCoinshowCoin请更改 hidden属性来更改其可见性。

最后deleteCoin从场景中删除Coin指定id .

关于swift - 如何根据名称编辑 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34553601/

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