2015-06-09 48 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函數中調用它時,它可以工作。當我在touchesMoved()函數中調用它時,它可以工作。但是,當我嘗試在初始化方法中使用

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

時,它會失敗。爲什麼是這樣?我是否必須使用「自我」中的performSelector函數,然後使用NSTimer將它永久重複?

另外,我試着將NSLog引入代碼中,以查看它是否在重複操作中被執行時,它是。唯一的問題是氣球沒有被添加到屏幕上。我的感覺是,當我通過repeatActionForever調用spawnBalloon函數時,self指向一個不同的類?對不起,如果這是令人困惑的,我還是新來Objective C和SpriteKit,而不是真的讀了很多我潛入並決定什麼時候需要學習(但我有廣泛的Java/C知識)

編輯: 我想,如果我沒有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