2014-12-07 4 views
0

Я только что закончил свою быструю игру, и я бы попробовал ее на всех устройствах. Я просто отмечаю, что перед iPhone 5S все устройство не работает с arc4random. IPhone 5 - это 32-битное устройство, а arc4random возвращает UInt32, и это вызовет переполнение, если случайное число слишком велико. Я попытался заменить arc4random на arc4random_uniform, так как onevcat сказал here. Но все равно не работает.Быстрый код не работает на iPhone 5

Смотрите мой код и ошибка скриншоте ниже:

var lastYieldTimeInterval:NSTimeInterval = NSTimeInterval() 
var lastUpdatetimeInterval:NSTimeInterval = NSTimeInterval() 
var lastUpdatetimeIntervalBl:NSTimeInterval = NSTimeInterval() 
var lastYieldTimeIntervalrou:NSTimeInterval = NSTimeInterval() 
var lastYieldTimeIntervalro:NSTimeInterval = NSTimeInterval() 
var lastYieldTimeIntervalj:NSTimeInterval = NSTimeInterval() 
var lastYieldTimeIntervalvio:NSTimeInterval = NSTimeInterval() 
var lastYieldTimeIntervalv:NSTimeInterval = NSTimeInterval() 
var lastYieldTimeIntervalora:NSTimeInterval = NSTimeInterval() 
var lastYieldTimeIntervaln:NSTimeInterval = NSTimeInterval() 
var lastYieldTimeIntervalGold:NSTimeInterval = NSTimeInterval() 


func updateWithTimeSinceLastUpdate(timeSinceLastUpdate:CFTimeInterval){ 


    let minInterval = UInt32(0) 
    let maxInterval = UInt32(1500) 
    let rangeInterval = UInt32(maxInterval - minInterval) 




    lastYieldTimeInterval += timeSinceLastUpdate 
    let intervalbl = Int(arc4random_uniform(rangeInterval)) + Int(minInterval) 
    if (lastYieldTimeInterval > NSTimeInterval(intervalbl)){ 
     lastYieldTimeInterval = 0 
     addBalloonbl() 

    } 

    lastYieldTimeIntervalj += timeSinceLastUpdate 

    let intervalj = Int(arc4random_uniform(rangeInterval)) + Int(minInterval) 
    if (lastYieldTimeIntervalj > NSTimeInterval(intervalj)){ 
     lastYieldTimeIntervalj = 0 
     addBalloonj() 
     } 

    lastYieldTimeIntervalora += timeSinceLastUpdate 
    let intervalora = Int(arc4random_uniform(rangeInterval)) + Int(minInterval) 
    if (lastYieldTimeIntervalora > NSTimeInterval(intervalora)){ 
     lastYieldTimeIntervalora = 0 
     addBalloonora() 
    } 


    lastYieldTimeIntervalrou += timeSinceLastUpdate 
    let intervalrou = Int(arc4random_uniform(rangeInterval)) + Int(minInterval) 
    if (lastYieldTimeIntervalrou > NSTimeInterval(intervalrou)){ 
     lastYieldTimeIntervalrou = 0 
     addBalloonrou() 
    } 


    lastYieldTimeIntervalro += timeSinceLastUpdate 
    let intervalro = Int(arc4random_uniform(rangeInterval)) + Int(minInterval) 
    if (lastYieldTimeIntervalro > NSTimeInterval(intervalro)){ 
     lastYieldTimeIntervalro = 0 
     addBalloonro() 
    } 


    lastYieldTimeIntervalvio += timeSinceLastUpdate 
    let intervalvio = Int(arc4random_uniform(rangeInterval)) + Int(minInterval) 
    if (lastYieldTimeIntervalvio > NSTimeInterval(intervalvio)){ 
     lastYieldTimeIntervalvio = 0 
     addBalloonvio() 
    } 


    lastYieldTimeIntervalv += timeSinceLastUpdate 
    let intervalv = Int(arc4random_uniform(rangeInterval)) + Int(minInterval) 
    if (lastYieldTimeIntervalv > NSTimeInterval(intervalv)){ 
     lastYieldTimeIntervalv = 0 
     addBalloonv() 
    } 


    let minIntervalBl = 1 
    let maxIntervalBl = 3000 
    let rangeIntervalBl = maxIntervalBl - minIntervalBl 


    lastYieldTimeIntervaln += timeSinceLastUpdate 
    let intervaln = Int(arc4random()) % Int(rangeIntervalBl) + Int(minIntervalBl) 
    if (lastYieldTimeIntervaln > NSTimeInterval(intervaln)){ 
     lastYieldTimeIntervaln = 0 
     addBalloonnoir() 
    } 

    let minIntervalGold = 4 
    let maxIntervalGold = 3000 
    let rangeIntervalGold = maxIntervalGold - minIntervalGold 


    lastYieldTimeIntervalGold += timeSinceLastUpdate 
    let intervalGold = Int(arc4random()) % Int(rangeIntervalGold) + Int(minIntervalGold) 
    if (lastYieldTimeIntervalGold > NSTimeInterval(intervalGold)){ 
     lastYieldTimeIntervalGold = 0 
     addBalloongold() 
    } 

} 

enter image description here

+0

Я полагаю, что сообщение реальной ошибки в том, что «Int» не конвертируется в ** «UInt32» **? –

+0

Да, вы правы. Я использую упомянутый вами вопрос. Несмотря на мою коррекцию, я все еще имею ту же ошибку (см. Скриншот). Он останавливается на 'lastYieldTimeInterval + = timeSinceLastUpdate'. Я обновил вопрос с помощью нового кода – Haox

+0

. То же самое: lastYieldTimeInterval и timeSinceLastUpdate имеют разные типы. Swift не подразумевает конвертирование типов. –

ответ

0

я обнаружил, почему это не работает. На самом деле это не timesincelastupdate, но все же arc4random. Я забыл заменить его на две линии. Теперь все работает ...

Спасибо за вашу помощь

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