画面上にランダムに配置された小さなボールを生成する関数があります。私が直面している問題は、ボールをランダムに分散させたいということですが、そうすると、いくつかのボールが互いの上にスポーンします。既に取得されているすべての位置 (およびおそらくボールの周囲の数ピクセルのバッファー) を除外したいのですが、その方法がわかりません。私はボールに Physicsbody を与えることでこれを回避し、お互いの上にスポーンした場合にボールが離れていくようにしました。しかし、そもそもそれらが互いの上に出現しないようにしたい. 今のところ私のコードは次のとおりです。
spawnedBalls = [Ball]()
level = Int()
func setupLevel() {
let numberOfBallsToGenerate = level * 2
let boundary: CGFloat = 26
let rightBoundary = scene!.size.width - boundary
let topBoundary = scene!.size.height - boundary
while spawnedBalls.count < numberOfBallsToGenerate {
let randomPosition = CGPoint(x: CGFloat.random(in: boundary...rightBoundary), y: CGFloat.random(in: boundary...topBoundary))
let ball = Ball()
ball.position = randomPosition
ball.size = CGSize(width: 32, height: 32)
ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.size.width)
ball.physicsBody?.affectedByGravity = false
ball.physicsBody?.allowsRotation = false
ball.physicsBody?.categoryBitMask = 1
ball.physicsBody?.collisionBitMask = 1
spawnedBalls.append(ball)
self.addChild(ball)
}
}
この問題は、取得したすべての位置を格納する配列を使用して解決する必要があるかどうか、または占有スペースを差し引くことができるある種の FiledNode を使用する必要があるかどうかはわかりませんが、残念ながら私は FieldNodes に慣れていないので、私はそれが問題に直面する正しい方法かどうかはわかりません。