2015-06-10 3 views
3

Я делаю игру, где у меня есть узел, который нерестится и падает с верхней части экрана. Однако я хочу, чтобы узлы появлялись случайным интервалом времени между периодом 3 секунды. Таким образом, один раз за 1 секунду, следующий через 2.4 секунды, следующий за 1.7 секунды и т. Д. Навсегда. Я борюсь с тем, что для этого должен быть код.Истекает узел Spritekit в случайное время

Кода я в настоящее время для нерестового узла:

let wait = SKAction.waitForDuration(3, withRange: 2) 
    let spawn = SKAction.runBlock { addTears() 
    } 

    let sequence = SKAction.sequence([wait, spawn]) 
    self.runAction(SKAction.repeatActionForever(spawn)) 

Кода для моей addTears функции() является:

func addTears() { 
     let Tears = SKSpriteNode (imageNamed: "Tear") 
     Tears.position = CGPointMake(Drake1.position.x, Drake1.position.y - 2) 
     Tears.zPosition = 3 
     addChild(Tears) 

    //gravity 
    Tears.physicsBody = SKPhysicsBody (circleOfRadius: 150) 
    Tears.physicsBody?.affectedByGravity = true 

    //contact 
    Tears.physicsBody = SKPhysicsBody (circleOfRadius: Tears.size.width/150) 
    Tears.physicsBody!.categoryBitMask = contactType.Tear.rawValue 
    Tears.physicsBody!.contactTestBitMask = contactType.Bucket.rawValue 
    } 
+0

Используйте функцию 'arc4random_uniform()' для генерации случайных чисел. А затем назначьте их в timeInterval. –

+0

Можете ли вы дать мне пример того, как назначить их в timeInterval? – NickyNick321

+0

Обновлен код. –

ответ

3

Это не рекомендуется использовать NSTimer с SpriteKit (см SpriteKit - Creating a timer). Вместо этого, чтобы генерировать случайные времена, вы можете использовать SKAction.waitForDuration:withRange:

Создает действие, которое простаивает в течение рандомизированного периода времени.

Когда действие выполняется, действие ожидает определенное количество времени, то заканчивается ...

Каждый раз, когда действие выполняется, действие вычисляет новое случайное значения длительности. Продолжительность может изменяться в любом направлении от до половины величины параметра durationRange ...

Чтобы вызвать узлы в случайные моменты времени можно объединить с waitForDuration:withRangerunBlock: вместе в SKAction последовательности. Например:

// I'll let you adjust the numbers correctly... 
let wait = SKAction.waitForDuration(3, withRange: 2) 
let spawn = SKAction.runBlock { 
    // Create a new node and it add to the scene... 
} 

let sequence = SKAction.sequence([wait, spawn]) 
self.runAction(SKAction.repeatActionForever(sequence)) 
// self in this case would probably be your SKScene subclass. 
+0

Я заменил свой код на этот код, и по какой-то причине моя игра не началась. Мой узел уже создан, поэтому я добавил его в область, в которой говорится: // Создаем новый узел и добавляем его в сцену .... Не могу понять, что я делаю неправильно. – NickyNick321

+0

Когда вы говорите «не начиналось»? Вы получаете какие-либо ошибки? – ABakerSmith

+0

Сцена, которая запускает этот код, - это моя вторая сцена, первая - «нажмите, чтобы начать». Когда я запускаю игру и пытаюсь запустить ее, она не загружает вторую сцену. – NickyNick321

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