确保节点可见
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))
所以我有这个 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))