2016-06-18 5 views
2

레벨 생성기를 사용하여 SKSpriteNode를 만듭니다.SWIFT의 SKSpriteNode에서 CGPath를 만드는 방법

square1

내가 정확히 CGPath를 사용하여 동일한 모양을 만들 필요가있다.

self.firstSquare = childNodeWithName("square") as! SKSpriteNode 

    var transform = CGAffineTransformMakeRotation(self.firstSquare.zRotation) 
    let rect = CGRect(origin: self.firstSquare.position, size: self.firstSquare.size) 
    let firstSquareCGPath:CGPath=CGPathCreateWithRect(rect, &transform) 
    print(self.firstSquare.position) 

=> firstSquare 위치 (52.8359451293945, -52.9375076293945)

내 CGPath이 내가 원하는대로, 내 CGPath와 SKShapeNode을 만들어 생성되었는지 확인하려면 다음

let shape:SKShapeNode=SKShapeNode(path:path) 
shape.fillColor = self.getRandomColor() 
addChild(shape) 
print(shape.position) 

=> 모양 위치 (52.8359451293945, -52.9375076293945)

결과가 예상 한 것과 다릅니다. 내 CGPath이 잘못되면

enter image description here

그래서 나도 몰라, 또는 인 경우에 나는 초기 스프라이트 속성을 잃게 SKShapeNode에서 변환 할 때.

내가 그렇게해야하는 이유

이해하려면, 편집 this stack

1, 2

를 참조하십시오 내가 추가 :

shape.position = self.firstSquare.position 

내가 얻을 :

enter image description here

편집 3 : 나는 위의 내 설명을 업데이트

, 내 firstSquare의 앵커 포인트는 지금 (0.5, 0.5) 보통

답변

0

해결책을 찾은 후 SKShapeNode(path:, centered:)을 사용해야하고 변환을 적용하고 위치를 설정해야합니다.

self.firstSquare = childNodeWithName("square") as! SKSpriteNode 

let firstSquareCGPath:CGPath=CGPath(rect: CGRect(origin: self.firstSquare.position, size: self.firstSquare.size), transform: nil) 

let shape:SKShapeNode=SKShapeNode(path: firstSquareCGPath, centered: true) //important 
shape.zRotation = self.firstSquare.zRotation 
shape.position = self.firstSquare.position 
shape.fillColor = SKColor.blue() 
addChild(shape) 

완벽하게 작동합니다.

마지막으로 (SKShapeNode 속성 때문에) 변환 및 위치를 설정 했으므로 위의 CGPath가 올바르게 설정되었는지 (예 : 내 SKSpriteNode) 알지 못합니다.

1

나는 단지 코드를 작성 preefer, 그러나 여기, 파일을 .SKS 사용하지 않는 원래의 .sks 위치가있는 사각형과 다른 위치가없는 두 번째 사각형이있는 두 개의 사각형이있는 것 같습니다.

당신은 단순히 첫 번째 사각형을 오버레이하려면 :

shape.position = self.firstSquare.position 

편집 :

나는 또한 당신의 anchorPoint가 (0.0, 0.0)에 걸렸고했다 볼 수 있지만 기본 앵커 포인트가 (0.5 , 0.5). sk와 일치하도록이 매개 변수를 수정하십시오.

당신 .sks 크기의 레이아웃은 그렇게하지 장면과 같은 수 :

scene.scaleMode = .ResizeFill 

에서 : 당신이 당신의 장면을 제시하기 전에

scene.size = skView.bounds.size 

변경이 매개 변수도 봐 주시기 바랍니다 사실, 스케일 모드는 위치 지정에도 영향을 미칩니다.

스케일 모드 란 무엇입니까??

장면의 스케일 모드는 iOS 장치가 회전 할 때 장면을 채우도록 장면이 어떻게 업데이트 될지를 결정합니다. 정의 된 네 가지 scaleMode가 있습니다.

SKSceneScaleModeFill - 장면이 화면을 채울 수 있도록 x 축과 y 축의 크기가 각각 위아래로 조정됩니다. 장면의 내용이 현재 종횡비를 유지하지 않습니다. 장면에 대해 scaleMode를 지정하지 않은 경우 기본값입니다.

SKSceneScaleModeAspectFill - x 및 y 축척 계수가 모두 계산됩니다. 더 큰 스케일 팩터가 사용됩니다. 이렇게하면보기가 채워지지만 대개 장면의 일부가 잘릴 수 있습니다. 장면의 이미지는 일반적으로 크기가 조정되지만 올바른 종횡비가 유지됩니다.

SKSceneScaleModeAspectFit - x 및 y 축척 계수가 모두 계산됩니다. 더 작은 스케일 팩터가 사용됩니다. 이렇게하면 전체 장면을 볼 수 있지만 일반적으로 장면이 레터 박스로 표시됩니다. 장면의 이미지는 일반적으로 축소되지만 올바른 가로 세로 비율을 유지합니다.

SKSceneScaleModeResizeFill - 장면의 크기가 조절되지 않습니다. 뷰의 크기에 맞게 크기가 조정됩니다. 장면의 크기가 조정되지 않기 때문에 이미지는 원래 크기와 종횡비로 유지됩니다. 내용은 모두 장면 원점 (왼쪽 하단)에 상대적으로 유지됩니다.

+0

작동하지 않는 것 같습니다. 제 편집을 참조하십시오. – cmii

+0

내 편집 섹션보기 –

+0

좋아요, 앵커 포인트를 (0.5, 0.5)로 설정하여 설명을 업데이트했습니다. 결과는 여전히 내가 필요한 것이 아닙니다. – cmii