2016-10-22 1 views
2

Чтобы представить кучу узлов, по одному на кадр, пока они не станут на экране, я собираюсь сделать что-то подобное в вызове update().run loop in update() spritekit, редко, эффективно: способ?

Предупреждение, псевдо-код приближается:

update(){ 

switch presentNodes_inOrderOfArrayIndex { 

case on 
    if indexPostion less than arrayOfNodes length 
    run Action to present node pulled from indexPostion in arrayOfNodes 
    increment indexPosition by 1 
    else presentNodes_inOrderOfArrayIndex.OFF 
return 

case default 
return 

} 

Но это редко будет дальше и делать эту презентацию в качестве ре-презентации. Таким образом, 99,999% времени он делает ненужную проверку через этот переключатель.

Есть ли способ достичь этого, не помещая что-то в update(), которое называет каждый отдельный кадр жизни игры и вместо этого действует только активно и делает свое дело по мере необходимости?

+0

Где это обновление? –

+0

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

+0

@Whirlwind, чтобы получить их появление на экране, довольно быстро, а не просто выкладываться на экран, все сразу. – Confused

ответ

3

Да, этот код внутри update должен быть удален.

Вы можете попробовать это

class GameScene: SKScene { 

    let nodesToAdd: [SKNode] = [] 

    func startAddingNodes() { 

     var index = 0 
     let add = SKAction.run { [unowned self] in 
      self.addChild(self.nodesToAdd[index]) 
      index += 1 
     } 
     let wait = SKAction.wait(forDuration: 0.016) 
     let sequence = SKAction.sequence([add, wait]) 
     let repeatSequence = SKAction.repeat(sequence, count: nodesToAdd.count) 

     self.run(repeatSequence) 
    } 

} 

Теперь все, что вам нужно сделать, это вызывая startAddingNodesтолько один раз.

+4

Привет, appzYourLife, извините, но вы уверены, что он работает «по одному за кадр»? Должно ли это быть справедливым только для 1/60 кадров?. Также SpriteKit не знает, сколько кадров будет в секунду, поэтому единственным способом должен быть метод обновления. Постскриптум Я видел ваш блог, отличный рабочий человек, хороший проект. –

+0

@AlessandroOrnano: Хорошая точка! На самом деле я не могу гарантировать часть '' один за кадр''. Это просто приближение. –

+0

Это действительно служит моей цели. Я не считал «злоупотребление» 'forDuration' такими низкими цифрами. Но это кажется совершенно хорошим злоупотреблением ими;) – Confused