2014-11-08 4 views
0

я строй игры, для которой я гравитация как:Как увеличить значение NSNumber каждые 5 секунд?

self.physicsworld.gravity = CGVectorMake(gravityX , gravity-Y); 

я хочу изменить силы, действующие на узле спрайта со временем.

Поскольку я новичок, я не могу закодировать цикл (ы), чтобы гравитация менялась со временем, тем самым изменяя сложность игры. если я хочу, чтобы float-переменная gravityX увеличивалась на 0,5 каждые 5 секунд, какой должен быть реализованный код.

Основная проблема, с которой я столкнулся с использованием FOR LOOP, находится в состоянии CONDITION; Я не знаю, как заставить компьютер понять фактическое время с начала игры.

+0

возможно дубликат [Spritekit - Создание таймера] (http://stackoverflow.com/questions/23978209/spritekit-creating- таймер) - используйте методы синхронизации, предоставленные Sprite Kit, ** не используйте ** NSTimer! – LearnCocos2D

ответ

0

Это можно сделать, используя класс SKAction. Добавьте следующий подкласс к вашему подклассу SKScene и вызовите его, когда хотите, чтобы гравитация начала увеличиваться. Я включил обе версии Objective-C и Swift.

Objective-C:

- (void)startGravityIncrease { 
    SKAction *blockAction = [SKAction runBlock:^{ 
     CGVector gravity = self.physicsWorld.gravity; 
     gravity.dx += 0.5; 
     self.physicsWorld.gravity = gravity; 
    }]; 
    SKAction *waitAction = [SKAction waitForDuration:5]; 
    SKAction *sequenceAction = [SKAction sequence:@[waitAction, blockAction]]; 
    SKAction *repeatAction = [SKAction repeatActionForever:sequenceAction]; 

    [self runAction:repeatAction]; 
} 

Swift:

func startGravityIncrease() { 
    let blockAction = SKAction.runBlock {() -> Void in 
     self.physicsWorld.gravity.dx += 0.5 
    } 
    let waitAction = SKAction.waitForDuration(5) 
    let sequenceAction = SKAction.sequence([waitAction, blockAction]) 
    let repeatAction = SKAction.repeatActionForever(sequenceAction) 

    self.runAction(repeatAction) 
} 
Смежные вопросы