确保节点可见

Making Sure Nodes are visible

所以我有这个 sprite kit 游戏,编码在 swift 2. 游戏包括从屏幕上掉落的这些彩色圆圈(绿色、红色、紫色、黄色、蓝色),从高度相同,但起始宽度不同。当圆圈到达屏幕底部时,调用可敬的方法。我遇到的问题是,随机的 x 位置有时会切断一半的圆圈,因为它位于屏幕的最一侧。如何防止圆圈剪裁屏幕的一侧?以下是当圆圈到达屏幕底部时调用的方法。

    func changeGreen(){

    Green.position.y = frame.size.height * 0.9

    let PositionX = arc4random_uniform(UInt32(self.frame.width))

    Green.position.x = CGFloat(PositionX)

}

func changeRed(){

    Red.position.y = frame.size.height * 0.9

    let PositionX = arc4random_uniform(UInt32(self.frame.width))

    Red.position.x = CGFloat(PositionX)

}

func changeBlue()   {

    Blue.position.y = frame.size.height * 0.9

    let PositionX = arc4random_uniform(UInt32(self.frame.width))

    Blue.position.x = CGFloat(PositionX)

}

func changeYellow() {

    Yellow.position.y = frame.size.height * 0.9

    let PositionX = arc4random_uniform(UInt32(self.frame.width))

    Yellow.position.x = CGFloat(PositionX)

}

func changePurple() {

    Purple.position.y = frame.size.height * 0.9

    let PositionX = arc4random_uniform(UInt32(self.frame.width))

    Purple.position.x = CGFloat(PositionX)

}

假设 position.x 是圆心,我认为这样的事情可能有效:

let maxX = 350    // this is your frame width
let radius = 50   // radius of the circle
var positionX = Int(arc4random_uniform(UInt32(maxX - radius))) // max position of x is taken care of here


let pointsFromLeft = positionX - radius
if pointsFromLeft < 0 {
    positionX -=  pointsFromLeft // move to the right if necessary
}

您必须从 frame 的两端偏移圆的 radius,这样圆就不会被剪裁。

let radius = 20 // radius of your circle
let positionX = radius + arc4random_uniform(UInt32(self.frame.width - 2 * radius))