SpriteKit for循环

时间:2015-07-20 15:17:44

标签: for-loop

您好我正在尝试关注Ray Wenderlich网站的教程 [http://www.raywenderlich.com/76740/make-game-like-space-invaders-sprite-kit-and-swift-tutorial-part-1][1] 所以我要通过功能分解它,这样我才能理解它是如何工作的我已经注释掉了我认为我理解的东西但这一点让我难过 谢谢你的期待 for循环在开始时var行= 1是什么? 我只做了像

这样的lops
for Position in 0...9
    {
// do something with Position ten times 
    }

然后,如果行%3是什么意思,那么%in是什么?

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)
        }
    }
}

1 个答案:

答案 0 :(得分: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

第一行表示:

var row = 1:给定一个新变量row,值为1

row&lt; = kInvaderRowCount:只要变量行小于或等于kInvaderRowCount,就继续运行for循环

row ++:每次循环运行后,将行的值递增(增加)1

对于&#34;%&#34;,这是模运算符。它返回整数值除法运算后的余数。因此,如果7除以3 = 2,余数为1,那么

7/3 = 2

7%3 = 1

模数运算符产生整数。而1/​​3 = 0.33 ...,1%3 = 1.因为余数 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