2016-07-29 4 views
1

SKSpriteNodes를 생성 할 내 게임에서 for 루프를 실행 중입니다.SKSpriteNode의 x 위치 변경

첫 번째 블록을 (20, 40)에서 시작하고 x 위치에 20을 추가하고 모든 새 블록에 대해 y 위치에 40을 추가하고 싶습니다.

첫번째 블록 (20, 40) 번째 블록 (40, 80) 제 3 블록 (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) 
    } 

    } 

나는 또한 코드를 실행할 때 어떻게 보일지에 대한 print 문을 추가했습니다.

다음은 블록의 x 및 y 위치의 print 문입니다. 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 루프를 사용하는 이유는 20 픽셀 씩 x 위치를 더하거나 뺄 수있는 루프 내에서 switch 문을 만들 수 있기 때문입니다. 나는 while 루프로 그렇게 할 수 있는지 잘 모르겠다. 솔직히 말해서 나는 그것을 잘 이해하지 못한다. 그러나 이것이 나의 초기 질문에 답하기 때문에 이것을 옳은 대답으로 받아 들일 것입니다. 고맙습니다! –

+0

신경 쓰지 마라, 나는 내가하고 싶은 일을 할 수있다. 답변 주셔서 감사합니다! –

+0

개념적으로 n 개의 요소를 그릴 필요가 없기 때문에 사용했습니다. 제한이있는 요소를 그리기 위해이 루프를 시작 위치에서 제어 할 수 있습니다 –