2014-11-13 10 views
5

http://i.imgur.com/xkWTk9i.png Ho già ottenuto questo rettangolo per andare dall'alto verso il basso. Il problema che ho è che voglio che venga ripetuto ogni 2 secondi, quindi un altro rettangolo lo sta seguendo. Voglio che il mio codice generi i rettangoli ogni 2 secondi e lo ripeti come fa un flappy bird con i tubi verdi. Grazie. (Ho avuto modo di funzionare prima, ma ho cancellato il mio progetto per errore e non riesco a capire come ho fatto in primo luogo.) Im in Swift con Spritekit.Come dovrei ripetere un'azione in modo permanente in Swift?

.

class GameScene: SKScene { 
    let sprite = SKSpriteNode(imageNamed: "Rectangle 12") 

    override func didMoveToView(view: SKView) { 
    self.addChild(sprite) 

     //run doAction function 
     doAction() 

    } 


    //movement of rectangle 


    func createRectangle() { 
    let moveToBottom = SKAction.moveByX(0, y: 0 - self.frame.size.width , duration: 
    NSTimeInterval (3.0)) 

    let removeTheNode = SKAction.removeFromParent() 
    let moveAndRemovePipes = SKAction.sequence([moveToBottom, removeTheNode]) 
    let repeatAction = SKAction.repeatActionForever(moveAndRemovePipes) 
    sprite.xScale = 1 
    sprite.yScale = 1 
    sprite.position = CGPoint(x:0,y:0) 
    sprite.runAction(repeatAction) 


    } 
    //spawn multiple rectangles after 3 or 4 seconds 

    func doAction() { 
    let generateRectangles = SKAction.sequence([ 
    SKAction.runBlock(self.createRectangle), 
    SKAction.waitForDuration(NSTimeInterval(3.0))]) 
    let endlessAction = SKAction.repeatActionForever(generateRectangles) 
    runAction(endlessAction) 
    } 
} 

risposta

10

È possibile ripetere l'esecuzione della funzione con NSTimer.

override func didMoveToView(view: SKView) { 
    self.addChild(sprite) 

     var timer = NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: "doAction", userInfo: nil, repeats: true) 

    } 

Questo ripeterà l'esecuzione della funzione ogni 2 secondi.

EDIT:

si può fare in questo modo anche:

override func didMoveToView(view: SKView) { 
self.addChild(sprite) 

runAction(SKAction.repeatActionForever(SKAction.sequence([SKAction.runBlock(doAction), SKAction.waitForDuration(1.0)]))) 

} 
+0

Devo modificare la durata per la funzione createRectangle e doAction? Sta andando veramente veloce. – user3886268

+0

si richiede per 2 secondi, quindi ho impostato 0,2, ma se si desidera eseguire quella funzione per rallentare quindi aumentare il tempo. –

Problemi correlati