2016-08-05 4 views
2

私は現在、2つの異なるボール/バブル(プレーヤーと敵)を特徴とする新しいゲームを作成中です。私はこれらの両方をランダムに異なる時間にランダムに生成しようとしています(例えば、プレーヤー、敵、プレーヤー、プレーヤーなど(任意の順序ではありません))が、ゲームが進行してプレイヤーが再起動したゲーム。私は解決策を見いだそうとしている。私はスイッチケースを試しましたが、プレイヤーまたは敵のいずれかだけがゲームごとにスポーンします。誰にも解決策がありますか?他のコードが必要な場合は、私はそれを提供します。ランダムに異なるノードを生成する

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 
     } 

} 

答えて

1

あなたのコードは非常に簡単することができ

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) 
    } 
} 
関連する問題