2016-08-05 37 views
2

Ich bin gerade dabei, ein neues Spiel zu erstellen, das zwei verschiedene Bälle/Blasen (einen Spieler und einen Gegner) enthalten wird. Ich versuche, beide zufällig zu verschiedenen Zeiten zu spawnen (zB Spieler, Gegner, Spieler, Spieler usw. (nicht in beliebiger Reihenfolge)), aber zufällig, während das Spiel weitergeht und nachdem der Spieler neu startet das Spiel. Ich habe Probleme, eine Lösung zu finden. Ich habe einen Switch-Fall ausprobiert, aber nur entweder der Spieler oder der Gegner wird pro Spiel erscheinen. Hat jemand eine Lösung? Wenn ein anderer Code benötigt wird, werde ich es bereitstellen.Verschiedene Knoten nach dem Zufallsprinzip erzeugen

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    /* Called when a touch begins */ 


    if (gamestarted == false) { 

     gamestarted = true 


     /*Player and Enemy random spawner*/ 
     ballSwitchCase()  



     /*Tap to start*/ 
     tts.removeFromParent() 


    } else { 
     /*removed unnecessary code for question*/ 

} 


func mainBallSpawner() { 

    /*Main ball*/ 

    let spawn = SKAction.runBlock({ 

     ()in 

     self.creatingTheBall() 

    }) 

    let delay = SKAction.waitForDuration(3.0) 
    let spawnDelay = SKAction.sequence([spawn, delay]) 
    let spawnDelayForever = SKAction.repeatActionForever(spawnDelay) 
    self.runAction(spawnDelayForever, withKey: "spawnDelayForever") 

    let distance = CGFloat(self.frame.height + 170 + gameBall.frame.width) 
    let moveBalls = SKAction.moveToY(-distance, duration: NSTimeInterval(0.008 * distance)) 
    let removeBalls = SKAction.removeFromParent() 
    moveAndRemoveBalls = SKAction.sequence([moveBalls, removeBalls]) 


} 


func enemySpawner() { 

    /*Enemy*/ 

    let spawnEnemy = SKAction.runBlock({ 

     ()in 

     self.creatingEnemyBall() 

    }) 

    let delayEnemy = SKAction.waitForDuration(3.0) 
    let spawnDelayEnemy = SKAction.sequence([spawnEnemy, delayEnemy]) 
    let spawnDelayEnemyForever = SKAction.repeatActionForever(spawnDelayEnemy) 
    self.runAction(spawnDelayEnemyForever, withKey: "spawnDelayEnemyForever") 

    let enemyDistance = CGFloat(self.frame.height + 170 + enemyBall.frame.width) 
    let moveEnemy = SKAction.moveToY(-enemyDistance, duration: NSTimeInterval(0.008 * enemyDistance)) 
    let removeEnemy = SKAction.removeFromParent() 
    moveAndRemoveEnemy = SKAction.sequence([moveEnemy, removeEnemy]) 


} 


func ballSwitchCase() { 


     let spawnRandomBall = arc4random_uniform(2) 

     switch spawnRandomBall { 
     case 0: 
      mainBallSpawner() 
      break 
     case 1: 
      enemySpawner() 
      break 
     default: 
      break 
     } 

} 

Antwort

1

Ihr Code kann viel einfacher sein

import SpriteKit 

class GameScene: SKScene { 

    private var gameStarted = false 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     guard !gameStarted else { return } 
     gameStarted = true 
     beginCreatingSprites() 
    } 

    private func beginCreatingSprites() { 

     let addSomething = SKAction.runBlock { [weak self] in 
      if arc4random_uniform(2) == 0 { 
       self?.addBall() 
      } else { 
       self?.addEnemy() 
      } 
     } 
     let wait = SKAction.waitForDuration(3) 
     let sequence = SKAction.sequence([addSomething, wait]) 
     let repeatForever = SKAction.repeatActionForever(sequence) 
     self.runAction(repeatForever) 
    } 

    private func addBall() { 
     let ball = SKSpriteNode(imageNamed: "ball") 
     // set position etc... 
     self.addChild(ball) 
    } 


    private func addEnemy() { 
     let enemy = SKSpriteNode(imageNamed: "enemy") 
     // set position etc... 
     self.addChild(enemy) 
    } 
}