2016-01-25 3 views
0

Почему я получаю сообщение об ошибкеПочему я получаю EXC_BAD_INSTRUCTION ошибки (код = EXC_I386_INVOP, субкодовое = 0x0)

EXC_BAD_INSTRUCTION (код = EXC_I386_INVOP, субкодовое = 0x0)

в

let SpawnPoint = UInt32(MaxValue - MinValue) 

в следующем коде:

func SpawnRain() { 
    Rain = SKSpriteNode(imageNamed: "Rain") 
    let MinValue = self.size.width/8 
    let MaxValue = self.size.width - 40 
    let SpawnPoint = UInt32(MaxValue - MinValue) 
    Rain.size = CGSize(width: 32, height: 32) 
    Rain.position = CGPoint(x: CGFloat(arc4random_uniform(SpawnPoint)), y: self.size.height) 
    Rain.physicsBody = SKPhysicsBody(rectangleOfSize: Rain.size) 
    Rain.physicsBody?.categoryBitMask = PhysicsCatagory.Rain 
    Rain.physicsBody?.contactTestBitMask = PhysicsCatagory.Player 
    Rain.physicsBody?.affectedByGravity = false 
    Rain.physicsBody?.dynamic = true 

let action = SKAction.moveToY(-70, duration: 8.0) 
    let actionDone = SKAction.removeFromParent() 
    Rain.runAction(SKAction.sequence([action, actionDone])) 
    self.addChild(Rain) 
} 
+2

Прежде всего, пожалуйста, следуйте правилам форматирования кода, по крайней мере, при обмене кодом. Переменные начинаются с нижнего регистра по соглашению, также как и имена функций. Во-вторых, вы уверены, что плавание, которое вы вычисляете, никогда не отрицательно? Если self.size равен «0.0f», как и перед исходным макетом, это отправляет отрицательное число конструктору целых чисел без знака. – SmokeDispenser

+0

UInt32 является неподписанным, так что вы можете сделать это let maxValue = self.size.width> 0? self.size.width - 40: 0 –

+0

Предположительно, 'MaxValue - MinValue' не находится в диапазоне для' UInt32', и поэтому вы получаете ошибку. –

ответ

0

Если ширина мала, то MaxSize - MinSize < 0, и по соображениям безопасности попытка конвертировать отрицательное число в UInt32 приведет к сбою. Это часть дизайна Swift. На менее безопасном языке arc4random_uniform вернет огромное значение, которое может вызвать проблемы и привести к труднодоступной ошибке.

Смежные вопросы