执行相同的代码行

时间:2016-02-23 03:49:22

标签: 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次,然后允许随机数转换等级类型I我目前正在使用此代码生成级别单位:

    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循环和我所拥有的布尔变量来实现,是让它再次选择某个级别类型,直到达到相同级别类型的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函数选择级别类中包含的级别类型,这是我试图更改的内容。

2 个答案:

答案 0 :(得分:0)

您的for循环目前有点不合适 - 您正在i以及每个循环中递增for。因此,你会得到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
}

答案 1 :(得分:0)

你的循环没有做任何事情,它们只是重复设置一个变量的值,但它们并没有真正产生新的精灵

循环需要在其中包含产卵代码,例如:

for (var i = 0; i < Int(numberOfLevelUnitsSpawned); i++) {
   imageName = "Road"
   theType = LevelType.road

   spawnNewObject(imageName, theType)
}