随机产生不同的节点

时间:2016-08-05 20:31:11

标签: swift xcode sprite-kit

我目前正在创建一个新游戏,其中包含两个不同的球/气泡(一个玩家和一个敌人)。我试图让这两个人在不同的时间随机产生类似的东西(例如玩家,敌人,玩家,玩家等等(不是任何顺序))但随机游戏继续进行和之后玩家重新开始游戏。我在寻找解决方案时遇到了麻烦。我尝试过一个开关盒,但每个游戏只会产生玩家或敌人。有没有人有办法解决吗?如果需要任何其他代码,我将提供它。

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 个答案:

答案 0 :(得分: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)
    }
}