【问题标题】:Spawning different nodes randomly随机产生不同的节点
【发布时间】:2016-08-06 05:00:38
【问题描述】:

我目前正在创建一个新游戏,其中包含两个不同的球/泡泡(一个玩家和一个敌人)。我试图让这两者在不同的时间随机产生,有点像这样(例如玩家、敌人、玩家、玩家等(不按任何顺序)),但随着游戏的进行和玩家重新启动后随机产生游戏。我在尝试找到解决方案时遇到了麻烦。我试过一个开关盒,但每场比赛只有玩家或敌人会产生。有没有人有办法解决吗?如果需要其他代码,我会提供。

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
        }

}

【问题讨论】:

    标签: swift xcode sprite-kit


    【解决方案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)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 2012-11-02
      • 2012-09-24
      相关资源
      最近更新 更多