Глюк при создании случайных чисел

У меня есть код, который генерирует случайные фоновые изображения, но почему-то при вызове кода моя игра глючит на долю секунды, что очень заметно. После нескольких часов комментирования моего кода я сузил его до одного из моих генераторов случайных чисел. У меня есть два генератора случайных чисел, один из которых генерирует число от 0 до 2, а другой генерирует число от 0 до 162. Меня поставило в тупик то, что генератор, генерирующий число от 0 до 2, создает Сбой???

Вот мой код ниже, может ли кто-нибудь увидеть что-то, что мне не хватает?

    randomLandscape = CGFloat(arc4random_uniform(UInt32(3)))
    randomDistanceLandscape = CGFloat(arc4random_uniform(UInt32(sizePreviousLandscapeWidth2)))

    nodeLandscapeA = SKSpriteNode(imageNamed: "A\(Int(countWorld))2\(Int(randomLandscape))")
    nodeLandscapeA.name = "landscapeA"
    nodeLandscapeA.zPosition = CGFloat(arrayLandscapeZPosition[Int(countWorld)] + 3)
    nodeLandscapeA.position.y = nodeLandscapeA.size.height/2
    nodeLandscapeA.position.x = positionPreviousLandscapeX2 + sizePreviousLandscapeWidth2/2 + nodeLandscapeA.size.width/2 + randomDistanceLandscape

    nodeLandscapeB = SKSpriteNode(imageNamed: "B\(Int(countWorld))2\(Int(randomLandscape))")
    nodeLandscapeB.name = "landscapeB"
    nodeLandscapeB.zPosition = CGFloat(arrayLandscapeZPosition[Int(countWorld)] + 2)
    nodeLandscapeB.position.y = nodeLandscapeA.position.y
    nodeLandscapeB.position.x = nodeLandscapeA.position.x

Обратите внимание, если я ввожу randomLandscape = 1, глюк исчезает.


person Jarron    schedule 12.06.2015    source источник
comment
См. stackoverflow.com/questions/ 2794201/, особенно комментарий о сравнительной производительности.   -  person Phillip Mills    schedule 12.06.2015
comment
Что произойдет, если вы сделаете randomLandscape=0 или randomLandscape=2? Что произойдет, если вы вызовете его повторно? Есть ли задержка только при первом вызове arc4random_uniform?   -  person KirkSpaziani    schedule 12.06.2015
comment
@PhillipMills пытается найти информацию в сети, чтобы заставить random() работать, но на самом деле мало что нашел, пока все для arc4random. Я буду искать и, надеюсь, что-нибудь найду. Однако из того, что я нашел в сети, random() создает предсказуемые числа, с которыми я могу работать в этом случае.   -  person Jarron    schedule 12.06.2015
comment
@KirkSpaziani, когда randomLandscape = 0 или 2, он работает без сбоев. При повторном использовании замечаю какие-то глюки, а некоторых нет. Не могу сказать, есть ли задержка при первом вызове, но во второй раз (около 10 секунд) я вижу сбой. На данный момент код вызывается только два раза в моем коде, но будет увеличиваться   -  person Jarron    schedule 12.06.2015
comment
Здесь есть обсуждение (заголовок stackoverflow.com/questions/23685920/) из-за проблем с производительностью arc4random_uniform.   -  person picciano    schedule 12.06.2015
comment
Что это за глюк? У меня никогда не было проблем с arc4random_uniform, может проблема в другом...   -  person Jake Crastly    schedule 13.06.2015
comment
@picciano спасибо за ссылку, они что-то упоминают о том, что случайное генерирование не может идти в ногу с остальной частью кода, и в результате генерация случайных чисел замедлит остальную часть кода. Я думаю, что это может быть в случае с моим кодом, потому что ранее упоминалось, что как только randomLandscape присваивается определенное значение, код работает нормально.   -  person Jarron    schedule 13.06.2015
comment
@hamecanecha У меня есть несколько движущихся узлов в моем приложении, когда приведенный выше код запускается, все узлы останавливаются на долю секунды, а затем возобновляются. Я надеялся, что проблема возникла не из-за генератора случайных чисел, потому что я не могу обойти это, но после тестирования и комментирования кода генератор случайных чисел был единственным, что создавало сбой. Я все еще просматриваю свой код снова и снова, чтобы увидеть, есть ли что-то, что мне не хватает, чтобы попытаться исключить генератор случайных чисел, но не нашел ничего другого, что влияло бы на производительность.   -  person Jarron    schedule 13.06.2015
comment
Задержка, вероятно, связана с загрузкой изображения, а не генератора случайных чисел. Попробуйте предварительно загрузить изображения как SKTextures в массив и получить доступ к текстурам через случайное значение индекса.   -  person 0x141E    schedule 13.06.2015
comment
@ 0x141E спасибо за это. Я изменил свой код так, чтобы изображения генерировались в 1, 2, 3, а затем снова возвращались к 1 (без использования случайной генерации), и моя программа все еще давала сбои. Итак, я думаю, вы правы, говоря, что загрузка изображения вызывает проблему. Кроме того, когда одно и то же изображение использовалось для заполнения всех пейзажных изображений, сбой исчез, что имеет смысл, поскольку не нужно перезагружать изображения. Мне нужно изменить большую часть моего кода, чтобы увидеть, работает ли использование текстур, но я думаю, что да. Спасибо   -  person Jarron    schedule 13.06.2015
comment
@ 0x141E только что закончил внедрение текстур во весь мой код. Это полностью устранило глюк!!! Большое спасибо за ваш совет!   -  person Jarron    schedule 13.06.2015