在 iPhone 5s 模拟器上一直测试我的 spritekit 游戏后,我终于尝试在 iPhone 5 模拟器上运行它。不幸的是,当我第一次触摸时,我就收到了一个我不明白的错误。我的touchesBegan函数调用我的addCoin函数(见下文)
错误出现在该代码块中的某处。如果我注释掉这部分代码,其他一切都会正常工作:
func addCoin()
{
var coin:SKSpriteNode = SKSpriteNode(texture: coinFrames[0])
coin.size.width = 50
coin.size.height = 50
coin.physicsBody = SKPhysicsBody(circleOfRadius: coin.size.height / 2)
coin.physicsBody?.dynamic = false
coin.physicsBody?.allowsRotation = false
coin.physicsBody?.categoryBitMask = coinCategory
coin.physicsBody?.contactTestBitMask = playerCategory
var positionX:CGFloat = CGFloat(Int(arc4random()) % Int(500)) + CGFloat(70.0)
var positionY:CGFloat = CGFloat(Int(arc4random()) % Int(1007)) + CGFloat(63.0)
coin.position = CGPointMake(positionX, positionY)
coin.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(coinFrames, timePerFrame: 0.1, resize:false, restore:true)))
self.addChild(coin)
}
这是发生的错误。如果我注释掉这一行,下一行就会出错......
正如我所说,iPhone 5s 运行完美......
我的代码可能有什么问题?
xCode 6 beta 6 和 iOS 8 beta 7
提前致谢
调试器正在误导您。真正的问题是arc4random
,这将返回一个UInt32
iPhone 5 和 5s 上均适用。但由于 iPhone 5 是 32 位设备,Int(arc4random())
如果随机数足够大,就会导致溢出。
而不是使用Int(arc4random())
,您可以尝试使用替换它arc4random_uniform
。也许下面的代码可以帮助你。
var positionX: CGFloat = CGFloat(arc4random_uniform(500)) + CGFloat(70.0)
var positionY: CGFloat = CGFloat(arc4random_uniform(1007)) + CGFloat(63.0)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)