gpt4 book ai didi

ios - 设置 SKSpriteNode.phyisicsBody.categoryBitMask 时出现 EXC_I386_INVOP 错误

转载 作者:行者123 更新时间:2023-11-29 02:44:25 24 4
gpt4 key购买 nike

请耐心等待,我已经使用 XCode/IOS 工作了一天,所以您可能需要解释一些事情...

我得到的错误是 Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, s <-- 我看不到更多信息。

当我在此处设置 categoryBitMask 时会发生这种情况:

    var alien:SKSpriteNode = SKSpriteNode(imageNamed: "Alien")       
alien.physicsBody = SKPhysicsBody(texture: alien.texture, size: alien.size)
alien.physicsBody.categoryBitMask = alienCategory // <-- Here

它并不总是发生,它似乎发生在第二个“外星人”产生时(每秒产生一个新的)。

这是项目目前的链接:

https://www.dropbox.com/s/1npctvb99vw2l7x/BubbleBurst.zip

如果您能在这方面给我任何帮助,即使只是告诉我如何用谷歌搜索(我花了三个小时搜索但没有找到任何用处),我们将不胜感激!

最佳答案

编辑: 我已经解决了这个问题,但我不知道确切的问题。它与从 UInt 到 Int 的转换有关首先,它出现在 iPhone 5 模拟器中,而不是 iPhone 5s 我正在使用 Xcode Beta5。

其次,运行时异常出现在与显示不同的行中。

我认为这个问题与 arc4random 有关,因为它给出了 32 位整数,所以可能会发生一些事情。但是如果你用你的代码更改下面的代码,它不会抛出错误。我已将所有内容转换为UInt32

    let minimumDuration:UInt32 = 2
let maximumDuration:UInt32 = 4
let rangeDuration:UInt32 = maximumDuration - minimumDuration
println("range\(rangeDuration)")
let duration = arc4random() % rangeDuration + minimumDuration


var actionArray:NSMutableArray = NSMutableArray()
actionArray.addObject(SKAction.moveTo(CGPointMake(position, -alien.size.height), duration: NSTimeInterval(duration)))

此外,您还没有处理可选项。在 didBeginContact 的这一行中,firstBody.nodeseconBody.node 在您开火时为 nil然后它会与你的 body 发生碰撞。

因此它在运行时抛出异常 fatal error: unwrappingly found nil while unwrapping an Optional value in below line

 torpedodidCollideWithAlien(firstBody.node as SKSpriteNode, alien: seconBody.node as SKSpriteNode)

将其放入if条件并检查它是否为nil

if firstBody.node != nil && seconBody.node != nil {
torpedodidCollideWithAlien(firstBody.node as SKSpriteNode, alien: seconBody.node as SKSpriteNode)
}

final方法将在下面。将此方法替换为您的方法

func didBeginContact(contact: SKPhysicsContact!) {

if (contact != nil && contact.bodyA != nil && contact.bodyB != nil)
{
var firstBody:SKPhysicsBody
var seconBody:SKPhysicsBody

if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
{
firstBody = contact.bodyA
seconBody = contact.bodyB
}
else
{
firstBody = contact.bodyB
seconBody = contact.bodyA
}

if (firstBody.categoryBitMask & torpedoCategory != 0 && seconBody.categoryBitMask & alienCategory != 0)
{

if firstBody.node != nil && seconBody.node != nil {
torpedodidCollideWithAlien(firstBody.node as SKSpriteNode, alien: seconBody.node as SKSpriteNode)

}
}
}
}

关于ios - 设置 SKSpriteNode.phyisicsBody.categoryBitMask 时出现 EXC_I386_INVOP 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25327467/

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