gpt4 book ai didi

ios - 在 didMove 范围之外添加子项

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

我遇到了一个非常不寻常的问题 - 据我所知 - swift 3。我正在创建一个 SpriteKit iOS 游戏。问题出在 SKSpriteNode 上。我通过

创建节点

var gameOverBackground : SKSpriteNode!

它就位于类内部。然后我像这样在 didMove() 函数中初始化节点

override func didMove(to view: SKView) {        
gameOverBackground = SKSpriteNode.init(texture: SKTexture(image: #imageLiteral(resourceName: "UIbg")), size: CGSize(width: (self.scene?.size.width)! / 1.5, height: (self.scene?.size.height)! / 1.5))
gameOverBackground.position = CGPoint(x: 0, y: 0)
gameOverBackground.zPosition = 10
gameOverBackground.name = "GameOverBackground"
}

现在,当我稍后尝试将节点作为子节点添加到场景中时,问题就出现了。我在像这样的联系功能中这样做

func didBegin(_ contact: SKPhysicsContact) {

if (contact with many nodes) {
self.addChild(self.gameOverBackground)
}
}

我一直收到节点等于 nil 的错误。我找到了解决方法,只需在 didMove() 中添加子节点并将其隐藏即可。然后在接触发生时使其不隐藏;但我更好奇为什么会出现这个问题,以及我是否做错了什么。

提前致谢!

最佳答案

I have found a work around by just simply adding the child node in didMove() and making it hidden. Then just making it unhidden when contact happens; but I was more curious on why this problem is happening and if i'm doing something wrong.

这意味着您的节点在 didMove 中不是 nil,但是在您联系委托(delegate)时,沿途的某个地方已经变为 nil。

这是您的代码示例,只是稍微简化了一点:

var node: SKSpriteNode!

override func didMove(to view: SKView) {
node = SKSpriteNode(color: .blue, size: CGSize(width: 25, height: 25))
}

// Touchesbegan on ios:
override func mouseDown(with event: NSEvent) {
addChild(node)
}

代码运行良好,当您单击屏幕时会出现节点。

Touchesbegan/didBegin 不会产生影响。

问题是在您的代码中某处节点被设置为 nil。

这是一个如何发生的例子:

// Touchesended on ios:
override func mouseUp(with event: NSEvent) {
node.removeFromParent() // or, node = nil
addChild(node) // crash!!
}

关于ios - 在 didMove 范围之外添加子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46260325/

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