2015-07-28 6 views
0

Я пытаюсь создать несколько SKSpriteNodes в заданном расположении, но когда я добавляю несколько узлов, они просто появляются друг на друга? Есть ли способ не сделать это?Истерирование нескольких узлов в разных местах

У меня также возникла проблема с обновлением страницы, чтобы получить новое местоположение для узла. Есть ли способ, если узел исчезнет на странице, он будет появляться в новом месте в пределах установленных координгов?

let rect = CGRectMake(x: 90, y: 360, width: 200, height: 200) 
let x = rect.origin.x + CGFloat(arc4random()) % rect.size.width 
let y = rect.origin.y + CGFloat(arc4random()) % rect.size.height 
let randomPoint = CGPointMake(x, y) 
self.redcircle.position = randomPoint 
self.addChild(redcircle) 
self.bluecircle.position = randomPoint 
self.addChild(bluecircle) 

ответ

0

Вам нужно 2 randomPoint, чтобы поместить их в другое место. Вы используете 2 узла с одной позицией. randomPoint всегда одинаковый.

Edit (вопрос в комментарии):

Вы должны использовать мин (х, у) и макс (х, у)

let x = random(CGRectGetMinX(self.frame), max: CGRectGetMaxX(self.frame)) 
    let y = random(CGRectGetMinY(self.frame), max: CGRectGetMaxY(self.frame)) 

let randomPoint = CGPointMake(x, y) 
self.redcircle.position = randomPoint 
self.addChild(red circle) 

А вот случайная функция:

func random() -> CGFloat { 
     return CGFloat(Float(arc4random())/0xFFFFFFFF) 
    } 

    func random(min: CGFloat, max: CGFloat) -> CGFloat { 
     return random() * (max - min) + min 
    } 
+0

Спасибо! Знаете ли вы, что я могу сделать, чтобы создать узел в другом месте, не выходя из экрана. Поэтому я мог бы использовать SKAction для fadeOut, и он появится снова в другом месте? – MattJB

+0

Отредактировано, вам нужно min и max экрана – Lirf

0

Вам будет проще создать метод, который генерирует случайную точку, основанную на заданном прямоугольнике. Или метод, который нерестится спрайт в пределах заданного прямоугольника, например:

import SpriteKit 


class GameScene: SKScene { 

    let rect = CGRect(x: 90, y: 360, width: 200, height: 200) 

    override func didMoveToView(view: SKView) { 


     let debug = SKSpriteNode(color: SKColor.redColor(), size: rect.size) 

     debug.alpha = 0.2 

     debug.position = rect.origin 

     let origin = SKSpriteNode(color: SKColor.redColor(), size:CGSize(width: 5, height:5)) 

     debug.addChild(origin) 

     self.addChild(debug) 

    } 

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 

     let sprite = spawnSpriteAtRandomPositionWithinRect(rect) 


     self.addChild(sprite) 


     println("Sprite spawned at position x,y(\(sprite.position.x), \(sprite.position.y))") 
    } 

    func randomBetweenNumbers(firstNum: CGFloat, secondNum: CGFloat) -> CGFloat{ 

     return CGFloat(arc4random())/CGFloat(UINT32_MAX) * abs(firstNum - secondNum) + min(firstNum, secondNum) 
    } 

    func spawnSpriteAtRandomPositionWithinRect(rectangle:CGRect)->SKSpriteNode{ 


     let x = randomBetweenNumbers(rectangle.origin.x - rectangle.size.width/2.0 , secondNum: rectangle.origin.x + rectangle.size.width/2.0) 
     let y = randomBetweenNumbers(rectangle.origin.y - rectangle.size.height/2.0 , secondNum: rectangle.origin.y + rectangle.size.height/2.0) 

     let sprite = SKSpriteNode(color: SKColor.greenColor(), size:CGSize(width: 30, height: 30)) 

     sprite.position = CGPoint(x: x, y: y) 


     return sprite 
    } 

} 

Sprite с именем отладки не требуется на самом деле, но он показывает вам визуально данный прямоугольник.

+0

Он говорит, что я не могу положить let sprite = spawnSpriteAtRandomPositionWithinRect (rect) там, где он есть до объявления? – MattJB

+0

@MattJB Я не получаю ошибок с кодом выше. Можете ли вы скопировать и вставить реальное сообщение об ошибке? – Whirlwind

+0

Я пробовал код в новом файле в приложении, но он работает с другим кодом, который есть у меня в файле, есть ли способ сделать этот код интересным, поэтому я могу добавить его через новый файл? – MattJB

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

  • Нет связанных вопросов^_^