2015-11-22 2 views
0

Итак, я хотел бы создать блок кода, который будет запускаться внутри узла спрайта в каждом кадре. Результатом будет то, что я нажимаю и создаю пузырь там, который затем будет всплывать с использованием синуса. Можно ли закодировать в пузырь? Извините, если это кажется расплывчатым, я просто не уверен, как это назвать. Самое близкое, что я могу придумать, клонируя, и каждый клон запускает один и тот же скрипт в каждом кадре. В любом случае, вот что у меня есть сейчас.SpriteKit: Cloning Nodes

let bubble = SKSpriteNode(imageNamed:"bubble")  
bubble.position.x = CGFloat(rand())*self.frame.width 
bubble.position.y = -20 

//Code for bubble to run each frame 

self.addChild(bubble) 
+0

Итак, вы хотите, чтобы каждый пузырь перемещал определенную сумму каждые несколько секунд или вы хотите, чтобы пузыри перемещались в зависимости от их положения каждые несколько секунд? – septicorn

+0

Я бы хотел, чтобы они не только ускоряли движение вверх, но и колебались влево и вправо, используя синус. Я не хочу использовать SKActions. Мне бы очень хотелось просто закодировать их. – Kai

ответ

0

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

bubble.name = "bubble" 

Если вы назвали пузырьковый пузырь, все его дочерние узлы также будут называться «пузырь».

enumerateChildNodesWithName("bubble"){node, stop in 
     let bubbleChild:SKSpriteNode = node as! SKSpriteNode 

     //Run the code telling them what to do here. You should make it so that 
     //it can figure out how to move the node a slight amount based on its position 
} 

Вы могли бы назвать это, поместив его в функцию, которая вызывается с помощью таймера, и таймер должен называться часто, как каждые 0.017 секунд (примерно 60 раз в секунду), так что движение является гладким. Например:

var timer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(0.017), target: self, selector: Selector("moveBubbles:"), userInfo: nil, repeats: true) 

Затем, чтобы сделать функцию, что вызовы таймера:

func moveBubbles(timer: NSTimer!){ 
    //enumerateChildNodesWithName here 
} 

Там больше информации о enumerateChildNodesWithNamehere, и больше информации о NSTimerhere.

+0

Wow я думаю, это именно то, что я хотел, спасибо! – Kai

+0

Я мог бы заменить таймер петлей, которую у меня уже есть, не так ли? – Kai

+0

Да. Вам просто нужно что-то зациклиться. – septicorn