Swift 3 (Xcode 8) にアップグレードする前に、ランダムな位置の開始は次のようになりました。
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 }
これは次のように更新されたため、変換後に機能しなくなりました。
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 }
最終的にGamePlayKitについて学んだので、これはうまくいきました:
開始:
import GameplayKit
次に、GamePlayKit を使用して新しい確率変数を簡単に作成できます。
アップルのサイトで読むことができますが、基本的にこれにより、途中でより多くの「ヒット」が得られます。
lazy var randomStartPosition = GKGaussianDistribution(randomSource: GKARC4RandomSource(), lowestValue: 0, highestValue:100)
そして、これはすべて消費されるまでランダムな値を循環し、その後再び開始します。
lazy var randomShuffle = GKShuffledDistribution(randomSource: GKARC4RandomSource(), lowestValue: 0, highestValue:100)
最後に、完全にランダムな値のジェネレーター:
lazy var totallyRandom = GKRandomDistribution(lowestValue: 1, highestValue: 100)
使用方法の例:
MyObject.position = CGPoint(x: self.frame.size.width + 20, y: CGFloat(totallyRandom.nextInt()) )
これにより、オブジェクトが画面の右端から外れ、Y 軸上の完全にランダムな位置に配置されます。