2015-07-20 51 views
0

嗨我想跟隨Ray Wenderlich網站上的教程 [http://www.raywenderlich.com/76740/make-game-like-space-invaders-sprite-kit-and-swift-tutorial-part-1][1] 所以我要通過分解它的功能,以便我可以瞭解它是如何工作的我已經評論了東西這我想我明白,但這一點讓我難住 感謝您尋找 for循環whats var row = 1在開始時做什麼? 我只爲曾經做過的LOP像SpriteKit for循環

for Position in 0...9 
    { 
// do something with Position ten times 
    } 

那麼請告訴我在%如果row%3是什麼意思?

for var row = 1; row <= kInvaderRowCount; row++ // start of loop 
    { 
     var invaderType: InvaderType // varible of atype etc 
     if row % 3 == 0 
     { 
      invaderType = .AType 
     } else if row % 3 == 1 

她的代碼

func makeInvaderOfType(invaderType: InvaderType) -> (SKNode) // function passes in a enum of atype,btype,ctype and returns sknode 
{ 
    var invaderColor: SKColor// variable for the colour 
    switch(invaderType)// switch statment if we pass in atype we will get red 
    { 
    case .AType: 
     invaderColor = SKColor.redColor() 
    case .BType: 
     invaderColor = SKColor.greenColor() 
    case .CType: 
     invaderColor = SKColor.blueColor() 
    default: 
     invaderColor = SKColor.blueColor() 
    } 
    let invader = SKSpriteNode(color: invaderColor, size: kInvaderSize)//variable of a skspritenode with color from switch statement size from vairiabe kinvadersize 
    invader.name = kInvaderName // name is invader fron let kinvadername 
    return invader //return the spritenode with color size name 
} 
func setupInvaders() 
{ 

    let baseOrigin = CGPoint(x:size.width/3, y:180) // vairible to hold cgpoint screen size /3 width 180 height 
    for var row = 1; row <= kInvaderRowCount; row++ // start of loop 
    { 
     var invaderType: InvaderType // varible of atype etc 
     if row % 3 == 0 
     { 
      invaderType = .AType 
     } else if row % 3 == 1 
     { 
      invaderType = .BType 
     } else 
     { 
      invaderType = .CType 
     } 
     let invaderPositionY = CGFloat(row) * (kInvaderSize.height * 2) + baseOrigin.y// varible to hold cgfloat row ? think its the incriment of the for loop times 16 times 2 = 32 plus 180 first time is 212 then 244 

     /* so if ive got his rightthe sum goes row = 1 kinvadersize.hieght *2 = 32 + baseoringin.y = 180 
     1 * 32 +180 = 212 
     2 * 32 + 180 = 392 but its 244 


    */ 
     println(row) 
     var invaderPosition = CGPoint(x:baseOrigin.x, y:invaderPositionY) // varible to hold cgpoint 
     println(invaderPosition.y) 
     for var col = 1; col <= kInvaderColCount; col++ 
     { 
      var invader = makeInvaderOfType(invaderType)// varible that runs function and return the spritenode with color size name???? 
      invader.position = invaderPosition 
      addChild(invader) 
      invaderPosition = CGPoint(x: invaderPosition.x + kInvaderSize.width + kInvaderGridSpacing.width, y: invaderPositionY) 
     } 
    } 
} 

回答

0

如果我正確理解你的問題的其餘部分,這裏的答案。在此基礎上的代碼:

for var row = 1; row <= kInvaderRowCount; row++ // start of loop 
    { 
     var invaderType: InvaderType // varible of atype etc 
     if row % 3 == 0 
     { 
      invaderType = .AType 
     } else if row % 3 == 1 

第一行是指:

變種行= 1:給定一個新的變量,行,用1

行的值< = kInvaderRowCount:只要變量行是否小於或等於kInvaderRowCount,不斷for循環

行++運行:每個循環運行時,增量(增加)由1

的行的值之後

至於「%」,就是模運算符。它對整數值進行除法運算後返回餘數。因此,如果由7 3 = 2分,與1殘餘物,然後

7/3 = 2

7%3 = 1

在一個整數取模運算的結果。而1/​​3 = 0.33 ...,1%3 = 1。因爲剩餘除以3是1

1%3 = 1

2%3 = 2

3%3 = 0

4%3 = 1

5%3 = 2

6%3 = 0

另請參閱:How Does Modulus Divison Work

+0

嗨感謝您的答覆我想我得到的var行= 1,但沒有得到重置爲1每循環迭代?所以循環會無限期地運行? – user2164327

+0

編輯我看,如果我這樣做這樣的行沒有得到重置'code'var row = 1 for;行<= kInvaderRowCount; row ++ //循環開始'code' – user2164327

+0

Yup:for循環結構是這樣的,即使它看起來像在每個循環中創建一個新變量,但您並不是:您只是將該本地化變量「row」設置爲1,但代碼「var row = 1」僅在for循環啓動時運行,而不是在每次迭代時運行。 – Andrea