gpt4 book ai didi

swift 3 (SpriteKit) : Stop weak SKSpriteNode from becoming nil after initialisation

转载 作者:搜寻专家 更新时间:2023-11-01 07:16:49 25 4
gpt4 key购买 nike

在我的程序中,我目前在代码的开头(在我的 GameScene 类中)将 SKSpriteNode 定义为 weak 并声明它像这样:

weak var tapFade: SKSpriteNode? = SKSpriteNode(color: UIColor.red, size: CGSize(width: 10, height: 10))

但是,由于它是 weak 并且没有当前引用,所以在我要求使用它之前它被删除并变成了 nil。同样在我的程序中,我初始化了一个 weak SKLabelNode,如下所示:

weak var tapToBegin: SKLabelNode? = SKLabelNode(text: "Tap to Begin")

并且它不会像 SKSpriteNode 那样立即被删除。我实现这一点的方法是在我像这样使用它之前重新声明 SKLabelNode:

tapToBegin = SKLabelNode(text: "Tap to Begin")

当我想使用它时,这使得 SKLabelNode 不是 nil。虽然,我尝试用同样的方法重新声明 SKSpriteNode,但它仍然是 nil

注意:这是初始化的位置,也是我需要在我的程序中首先使用这些节点的地方:

class GameScene: SKScene, SKPhysicsContactDelegate {

//Initialisations are here
weak var tapFade: SKSpriteNode? = SKSpriteNode(color: UIColor.red, size: CGSize(width: 10, height: 10))
weak var tapToBegin: SKLabelNode? = SKLabelNode(text: "Tap to Begin")

override func didMove(to view: SKView) {
//I first use these nodes here
}
}

有没有办法防止 SKSpriteNode 立即被取消初始化?另外,为什么立即删除了SKSpriteNode,而SKLabelNode却没有?

最佳答案

使用 weak 关键字将导致 SpriteNode 被 ARC 拾取并被删除。所以当你尝试与 SpriteNode 交互时,你会得到一个异常,因为它不再在内存中。去掉 var 关键字前的 weak

var tapFade:SKSpriteNode = SKSpriteNode(color: UIColor.red, size: CGSize(width: 10, height: 10))

关于 swift 3 (SpriteKit) : Stop weak SKSpriteNode from becoming nil after initialisation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41755855/

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