dimanche 18 septembre 2016

Better Random Number Ranges In Swift 3

Before I upgraded to Swift 3 (Xcode 8) my random position start looked like this:

func randomStartPosition(range: Range<Int> = 45...(Int(self.frame.size.height)-45)) -> Int {
    let min = range.startIndex
    let max = range.endIndex
    return Int(arc4random_uniform(UInt32(max - min))) + min }

Which stopped working after the conversion because it was updated to this:

func randomSmallObjectsStartPosition(_ range: Range<Int> = 25...(Int(self.frame.size.height)-25)) -> Int {
    let min = range.lowerBound
    let max = range.upperBound
    return Int(arc4random_uniform(UInt32(max - min))) + min }

Which was worked out because I ended up learning about GamePlayKit:

Start by:

import GameplayKit

Then you can easily make new random variables using GamePlayKit:

You can read up on the apple site but basically this gives you more "hits" in the middle:

lazy var randomStartPosition = GKGaussianDistribution(randomSource: GKARC4RandomSource(), lowestValue: 0, highestValue:100)

And this will cycle through the random values until they are all consumed, then start again.

lazy var randomShuffle = GKShuffledDistribution(randomSource: GKARC4RandomSource(), lowestValue: 0, highestValue:100)

And lastly the totally random value generator:

lazy var totallyRandom = GKRandomDistribution(lowestValue: 1, highestValue: 100)




Aucun commentaire:

Enregistrer un commentaire