swift - 执行相同的代码行

标签 swift sprite-kit

因此,我目前使用以下代码随机生成不同类型的关卡单位:

 let diceRoll = arc4random_uniform(2)

    if (diceRoll == 0) {

            imageName = "Road"
            theType = LevelType.road

    } else if (diceRoll == 1) {

            imageName = "Water"
            theType = LevelType.water
    } 

但我目前正在尝试让一个关卡单位在允许其他关卡单位生成之前生成一定次数(例如,我希望道路关卡类型在允许随机发生器更改关卡类型之前生成 20 次)目前我正在使用此代码来生成关卡单位:

    var levelBoolean:Bool = false
    let diceRoll = arc4random_uniform(1)
    let LevelBlock: [Int] = [0, 1] // 1 , 2, 3, 5, 6, 7, 8, 9]
    let numberOfLevelUnitsSpawned = 20

    if(levelBoolean == false)  {

        levelBlockRandomiser = LevelBlock[Int(arc4random_uniform(UInt32(LevelBlock.count)))]

            levelBoolean = true   
    }

    if (levelBoolean == true) {

        if (levelBlockRandomiser == 0) {

            for (var i = 0; i < Int(numberOfLevelUnitsSpawned); i++) {

                imageName = "Road"
                theType = LevelType.road
                i++
            }
          }
        }

    if (levelBlockRandomiser == 1) {

        for (var i = 0; i < Int(numberOfLevelUnitsSpawned); i++) {

                imageName = "Water"
                theType = LevelType.water
                i++

            }
          }

我想做的就是让一个关卡类型生成一定次数,然后在该关卡类型完成后生成另一个关卡类型。

我做错了什么?

编辑:

不确定我是否解释得足够好,但是当游戏中生成关卡单元时,它首先必须确定该关卡单元的关卡类型。生成关卡单元的代码位于另一个类中。

因此,它会不断询问后面的级别类型是什么,因此它会返回到开头并再次遍历以确定下一个级别单元的下一个级别类型是什么,依此类推。

我试图用 for 循环和我拥有的 bool 变量实现的目标是让它再次选择某个级别类型,直到达到相同级别类型的 20,然后再次随机化级别类型并再次选择。但它似乎不想这样做,因为它不断随机产生不同的关卡类型。

编辑2:

好的,关卡生成代码是:

var initialUnits:Int = 10 

func addLevelUnits() {

    for (var i = 0; i < initialUnits; i++ ) {

        createLevelUnit()   
    }
}

func createLevelUnit() {

    let levelUnit:LevelUnit = LevelUnit()
    worldNode.addChild(levelUnit)
    levelUnit.zPosition = -1
    levelUnit.levelUnitWidth = screenWidth
    levelUnit.levelUnitHeight = levelUnitHeight
    levelUnit.direction = direction
    levelUnit.setUpLevel()

    levelUnit.position = CGPointMake( 0 ,  levelUnitCounter * levelUnitHeight)

    levelUnitCounter++

}

代码引用的 setUpLevel 函数选择包含在关卡类中的关卡类型,这也是我想要更改的。

最佳答案

您的 for 循环目前有点损坏 - 您在 for 以及每个循环内递增 i 。因此,您将得到 i = 0、2、4、6、8 等。您还一遍又一遍地设置相同的 imageName 和 theType 变量。这段代码应该看起来更像:

for (var i = 0; i < Int(numberOfLevelUnitsSpawned); i++) {
     imageName = "Water" // These 2 lines are still wrong though
     theType = LevelType.water
}

关于swift - 执行相同的代码行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35568457/

相关文章:

null - nil 和 Optional<T>.None 在 Swift 中是一回事吗?

ios - 如何使用 RxSwift 从返回 Observable 的服务中获取值

ios - UITableView 部分标题颜色行为不当

swift SpriteKit : How to make a sprite gain slight velocity when it collides with an object?

ios - Sprite-Kit:节点不会向左移动

swift - 类别位掩码冲突情况

swift - 多次调用 SpriteKit 碰撞

swift - 在 Swift 中比较两个 Timer 值

swift - 为什么我不能在 SwiftUI init 中为 @State var 赋值?

ios - 三 Sprite 节点碰撞