2015-06-09 3 views
1

В принципе у меня есть функция объекта появления, которая должна теоретически порождать случайный шар на экране с определенными свойствами. Я разработал метод как таковой:SKAction repeatActionForever не является нерестилища

-(void)spawnBalloon 
{ 
    int a = arc4random_uniform(self.frame.size.width); 
    int b = self.frame.size.height - 50; 
    CGPoint loc = CGPointMake(a, b); 
    [self spawnBalloonAtPoint:loc]; 
} 

И этот метод работает. Когда я вызываю его в функции init, он работает. Когда я вызываю его в функции touchhesMoved(), он работает. Однако, когда я пытаюсь вызвать его в методе init с помощью

[self runAction:[SKAction repeatActionForever:[SKAction performSelector:@selector(spawnBalloon) onTarget:self]]]; 

Не удается. Почему это? Должен ли я просто использовать функцию performSelector от «self», а затем использовать NSTimer, чтобы он повторялся навсегда?

Кроме того, я попытался бросить NSLog в код, чтобы убедиться, что он даже выполняется, когда он был в повторном действии, и это так. Единственная проблема заключается в том, что баллон не добавляется на экран. Я чувствую, что когда я вызываю функцию spawnBalloon через repeatActionForever, я сам отношусь к другому классу? Извините, если это сбивает с толку, я все еще новичок в Objective C и SpriteKit, и вместо того, чтобы действительно много читать, я нырнул и решил учиться - когда это необходимо (Однако у меня есть обширные знания Java/C)

EDIT: Я понял, что если у меня нет действия repeatForever, код будет выполняться и работать. Однако, если он там, он не работает.

ответ

0

Попробуйте это:

[self runAction:[SKAction repeatActionForever:[SKAction sequence:@[ 
                    [SKAction waitForDuration:0.1], 
                    [SKAction performSelector:@selector(spawnBalloon) onTarget:self] 
                    ]]]]; 
+0

Благодарим за отзыв. – TSwift

1

В дополнение на ответ DFrog, который даст вам желаемый результат, я думаю, вы найдете полезно, чтобы понять, почему ваш код не работает при использовании repeatActionForever: метода.

repeatActionForever: метод требует немедленного действия для работы. Это из документов:

Повторяющееся действие должно иметь не мгновенную продолжительность.

Мгновенное действие

мгновенного действия начинает и завершает в одном кадре анимации. Например, действие для удаления узла из его родителя - это мгновенное действие, поскольку узел не может быть частично удален. Вместо этого, когда действие выполняется, узел немедленно удаляется.

Не-мгновенного действия

Не-мгновенного действия имеет длительность, по которому он оживляет свои эффекты. При выполнении действия обрабатывается в каждом кадре анимации, пока действие не завершится

Как выяснили уже performSelector:onTarget создает действие, которое вызывает метод на какой-либо объект, но это действие выполняется мгновенно.Цитата из документов:

... Когда действие выполняется, вызывается метод целевого объекта. Это действие происходит мгновенно ...

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

+0

Благодарим за отзыв. – TSwift

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