2015-08-04 1 views
0

Я пытаюсь создать систему уровней для своей игры Breakout и не могу ее сделать из-за ошибки, которая охотится на меня.Двумерный массив в swift (по сравнению с 1)

let LEVEL_1 : [[Int]] = [ 
    [0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0], 
    [0,0,0,1,1,0,0,0], 
    [0,0,0,1,1,0,0,0], 
    [0,1,1,1,1,1,1,0], 
    [0,1,1,1,1,1,1,0], 
    [0,0,0,1,1,0,0,0], 
    [0,0,0,1,1,0,0,0], 
    [0,0,0,0,0,0,0,0],] 

Является ли уровень, а затем метод

func buildLevel(level: [Int]) 
{ 
    let offset:Float = (Float(self.frame.size.width) - (Float(brickWidth) * Float(numberOfBricks) + padding * (Float(numberOfBricks) - 1)))/2 
    var len = level.count 

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

     var yOffset:CGFloat{ 
      switch i { 
      case 1: 
       return self.frame.size.height * 0.8 
      case 2: 
       return self.frame.size.height * 0.6 
      case 3: 
       return self.frame.size.height * 0.4 
      default: 
       return 0 
      } 
     } 

     for(var j = 0; j < W_LEN; j++){ 
      if level[i][j] == 1{ 

       let brick = SKSpriteNode(imageNamed: "brick") 

       let calc1:Float = Float(i) - 0.5 
       let calc2:Float = Float(j) - 1 

       brick.position = CGPointMake(CGFloat(calc1 * Float(brick.frame.size.width) + calc2 * padding + offset), yOffset) 
       self.addChild(brick) 
       brick.physicsBody = SKPhysicsBody(rectangleOfSize: brick.frame.size) 
       brick.physicsBody?.allowsRotation = false 
       brick.physicsBody?.friction = 0 
       brick.name = brickCategoryName 
       brick.physicsBody?.categoryBitMask = ColliderCategory.brick.rawValue 




      } 
     } 
    } 
} 

Ошибка: «не может индексировать значение типа междунар с индексом типа ИНТ» появляется здесь: если уровень [я] [J ] == 1 {

Любая идея, как я могу решить эту ошибку и заставить мой уровень работать правильно?

+1

Возможно, вы хотите 'func buildLevel (уровень: [[Int]])' –

ответ

3

Посмотрите на свой код. Вы говорите:

func buildLevel(level: [Int]) 

Так level является один-мерный массив Int. Таким образом, нет смысла говорить, позже, level[i][j]. level[1] - это Int, и вы не можете сказать [j] (индекс) после Int (именно то, что сообщает об ошибке).

+0

Спасибо, что вы очень матовый. Иногда один сосредотачивается слишком сильно на центре и забывает края. :) – Denis

Смежные вопросы