2016-07-29 67 views
1

我在我的遊戲中運行一個for循環,可以生成SKSpriteNodes。更改SKSpriteNode的x位置

我希望我的第一個塊從(20,40)開始,併爲每個新塊添加20個x位置和40個y位置。

第一塊(20,40) 第二塊(40,80) 第三塊(60,120) 等等。

y位置的行爲是我想要的,但是x位置會隨機在屏幕上的任意位置開始,然後爲每個生成的新塊添加20個位置。

以下是我的代碼。

 func generateBlocks() { 

      for _ in 1..<5 { 

       xP += 20 
       yP += 40 

       let xx = CGFloat (xP) 
       let yy = CGFloat (yP) 

       print("x position: \(xx)") 
       print("y position: \(yy)") 

       let resourcePath = NSBundle.mainBundle().pathForResource("Blocks", ofType: "sks") 
       let blocks = MSReferenceNode(URL: NSURL (fileURLWithPath: resourcePath!)) 

       blocks.goals.position = CGPoint (x: xx,y: yy) 
       addChild(blocks) 
    } 

    } 

我還在運行代碼時添加了它的外觀樣式。

下面是塊的x和y位置的打印語句。 enter image description here

我試着切換xP和yP初始化的順序。這沒有用。

有什麼建議嗎?

+1

您可以發佈你在哪裏定義xP和yP?你對他們做的第一件事就是增加他們的價值觀,但我們看不到他們的開始。 – claassenApps

回答

0

我寧願使用while loops這類操作的,你必須從開始徵收條件,例如限制:

class GameScene: SKScene { 
    let deltaX:CGFloat = 20.0 
    let deltaY:CGFloat = 40.0 
    override func didMoveToView(view: SKView) { 
     let widthLimit = self.frame.width-40 
     let heightLimit = self.frame.height-140 
     let startX:CGFloat = 80.0 
     drawStair(startX,limits:CGSizeMake(widthLimit,heightLimit)) 
    } 
    func drawStair(startFromX:CGFloat,limits:CGSize) { 
     var currentX:CGFloat = startFromX 
     var currentY:CGFloat = startFromX+deltaY 
     while currentX<limits.width && currentY<limits.height { 
      drawBlock(CGPointMake(currentX,currentY)) 
      currentX += deltaX 
      currentY += deltaY 
     } 
    } 
    func drawBlock(position: CGPoint,size:CGSize = CGSizeMake(40,40)) { 
     let block = SKSpriteNode(color: UIColor.redColor(), size: size) 
     block.position = position 
     block.name = "block" 
     addChild(block) 
    } 
} 

輸出

enter image description here

+0

這是一個很好的解決方案,但是爲什麼我使用for循環的原因是我可以在循環內創建一個switch語句,我可以在x位置之間切換20個像素。我不確定我是否可以在一段時間內做到這一點,說實話,我不明白這一點。但我會接受這是正確的答案,因爲它確實回答了我最初的問題。謝謝! –

+0

沒關係,我可以做我想做的事。謝謝您的回答! –

+0

我已經使用過,因爲在概念上你不會畫'n個元素,你想繪製帶有限制的元素,所以限制控制這個循環從開始位置 –