2015-03-18 45 views
0

我已經拿到了全場雪碧套件製成,它具有執行方法,用時間間隔永遠重複它SKAction的難度間隔,以降低0.01秒每秒爲此,我使用的計時器:增加雪碧套件遊戲

difficultyTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(decrease) userInfo:nil repeats:YES]; 

哪個重複這一方法:

- (void)decrease { 
difficulty -= 0.01; 
NSLog(@"Difficulty: %.2f", difficulty); 
} 

我嘗試將difficulty設置爲一個浮點型,並將其設置爲NSTimeInterval,但該定時器不會影響SKAction -waitForDuration

回答

0

您可以使用SKSceneupdate功能添加更改waitDuration的玩家。以currentTimeInterval作爲參數,每幀調用update方法。我們可以使用計算在最後的addPlayer呼叫和當前幀之間流逝的時間。如果它的等待時間大於difficulty,那麼我們會再次更新它。

首先創建一個property這樣

@property (nonatomic) NSTimeInterval lastAddPlayerTime; 

然後在update功能

-(void)update:(NSTimeInterval)currentTime 
{ 
    if (currentTime - self.lastAddPlayerTime >= difficulty) { 
     self.lastAddPlayerTime = currentTime; 
     [self addPlayer]; 
    } 
} 

您還可以創建一個重複SKAction降低difficulty variable每一秒。

SKAction *increaseDifficultyAction = [SKAction 
             sequence:@[[SKAction waitForDuration:1.0], 
               [SKAction runBlock:^{ 
    difficulty -= 0.01; 
}]]]; 

[self runAction:[SKAction repeatActionForever:increaseDifficultyAction]]; 
+0

謝謝,它的工作完美,但我想讓'難度'變量在遊戲結束時重新開始。我已經試過這個代碼,但它不工作: 'SKAction * increaseDifficultyAction = [SKAction 序列:@ [[SKAction waitForDuration:1.0], [SKAction runBlock:^ { 如果(GAMEOVER ==否){ 難度 - = 0.01;其他{ 難度= 1.0; } }]]]; [self runAction:[SKAction repeatActionForever:increaseDifficultyAction]];' – 2015-03-22 22:39:18

+0

'gameover'是一個BOOL,用於檢查遊戲是否結束 – 2015-03-22 22:41:52

0

除了向addPlayer動作添加時間間隔外,您應該創建一個更新動作,每隔一段時間就會調用一次更新方法,然後在該功能內部添加用於添加播放器的邏輯。例如,如果您設置一個計時器以每0.1秒運行一次,您可以創建一個計數器變量,以查看有多少「更新」已經過去,然後有一個「難度」變量來確定您想要多少次更新添加一名玩家。

僞代碼:

-(void)update{ 
    counter+=1; 
    if(counter%difficulty == 0) 
    { 
    addPlayer(); 
    } 
} 

這樣你可以有你的邏輯在一個地方,並基於相同的「更新」計劃。您可以在3次更新後添加敵人,5次更新後更改背景等。