gpt4 book ai didi

ios - SpriteKit 崩溃 : how can physics body lose association with SKNode?

转载 作者:行者123 更新时间:2023-11-28 21:05:27 24 4
gpt4 key购买 nike

此代码崩溃是因为 secondbody 未与节点关联。

func didBegin(_ contact: SKPhysicsContact) {
// Set vars to hold bodies
var firstBody: SKPhysicsBody
var secondBody: SKPhysicsBody

// Sort bodies
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA
secondBody = contact.bodyB
} else {
firstBody = contact.bodyB
secondBody = contact.bodyA
}

// Handle different contacts
if firstBody.categoryBitMask == BallBitMask && secondBody.categoryBitMask == TileBitMask {
didBallTileHit(tile: secondBody.node!) // Code crashes here :(
}

...
}

1) 除了将物理体设置为 nil 之外,还有什么会导致物理体与 SpriteKit 中的节点失去关联?

2) 没有节点的物理体怎么可能存在?

最佳答案

SKSPhysicsBody 本身就是一个对象,完全可以创建但不与 SKSpriteNode 相关联(尽管可能用处不大 :-))

在您的didBallTileHit() 中,您是否removeFromParent() 任何节点?如果是这样,这可能是您崩溃的原因,因为 Sprite-Kit 在 2 个对象之间产生了多次碰撞,并且为 2 个节点多次调用 didBegin()。如果您随后在对 didBegin() 的第一次调用中移除其中一个节点,则它不会在第二次和后续调用中出现。

处理它的方法(在某些情况下你不能让 sprite-kit 多次调用 didBegin)是确保你的联系代码适应这个并且多次处理契约(Contract)不会导致问题(例如多次添加到分数、删除多个生命、尝试访问已删除的节点或 physicsBody 等)。

有关更多详细信息和可能的解决方案,请参阅此答案:https://stackoverflow.com/a/44384390/1430420

关于ios - SpriteKit 崩溃 : how can physics body lose association with SKNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45929168/

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