2015-10-04 3 views
0

Итак, у меня есть эта игра с комплектом спрайтов, которая закодирована в 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) 

} 

ответ

0

Предполагая, что 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 
} 
0

Вы должны компенсировать radius окружности с обоих концов frame так, что круги никогда не обрезаются.

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

Ваше решение также работает. У меня была проблема с шириной и высотой игровой сцены, отличной от ширины и высоты экрана, но я решил это. – jacobsan420

Смежные вопросы