2015-07-20 49 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