2016-08-31 12 views
3

저는 신속하게 익숙하지만 spritekit에서 제 손을 잡아 먹기 시작했습니다. 나는 끝없는 주자를 창조 한 튜토리얼을 따라왔다. 저자가 취한 접근법은 모든 자식을 포함하는 단일 SKNode를 만드는 것입니다. 이 컨테이너 노드는 모든 하위 노드를 개별적으로 이동하는 대신 이동됩니다. 하지만 저를 곤두박질하게 만들었습니다. 컨테이너 노드에는 크기가 연관되어 있지 않아서 어떻게 작동하는지/왜 왜 작동하는지, 그리고 저자가 실제로 설명하지는 않는다는 것이 다소 혼란 스럽습니다. Spritekit 끝없는 러너 부모 SKNode

그래서 우리가 내가 떠 INT에서 위의 코드 생략 한 일부 변환이다하지만 내가 이해 할 점에 대한 필요는 없습니다

let containerNode = SKNode() 
    let thePlayer = Player("image":"player") //SKSpriteNode 
    let inc = 0 
    override func didMoveToView(){ 
     self.anchorPoint = CGPointMake(0.5,0) 
     addChild(containerNode) 
     containerNode.addChild(player) 
     moveWorld() 
    } 

    func moveWorld(){ 
     let moveWorldAction = SKAction.moveByX(-screenWidth, y:0, duration:6) 
    let block = SKAction.runBlock(movedWorld) 
     let seq = SKAction.sequence([moveWorldAction,block]) 
     let repeatAction = SKAction.repeatActionForever(seq) 
     containerNode.runAction(repeatAction) 
    } 

    func movedWorld() { 
    inc = inc + 1 
    addObjects() 

    } 

    func addObjects() { 
    let obj = Object() 
    containerNode.addChild(obj) 
    let ranX = arc4random_uniform(screenWidth) 
    let ranY = arc4random_uniform(screenHeight) 
    obj.position = CGPointMake(screenWidth * (inc + 1) + ranX, ranY) 
    } 

있습니다.

새 개체를 만들 때 증가분으로 배수를 늘리는 이유는 무엇입니까?하지만 containerNode에는 크기가 없으므로 가져올 수없는 이유는 무엇입니까? 이렇게하는 것이 가장 효율적인 방법입니까?

나는 다른 모든 개체를 개별적으로 이동하는 것이 아니라 편리하다고 가정하고 있지만 크기가 없다는 사실은 나를 혼란스럽게합니다. 내가 SKNode에 대한 문서를 이해한다면

+1

나는 SKNodes를 우주로 상상하고 싶다. 무한히 확장하고있다. – Knight0fDragon

답변

2

제대로이 작은 부분은 귀하의 질문에 대답해야합니다

노드 트리의 모든 노드는 아이들에게 좌표 시스템을 제공합니다. 하위 노드 트리에 노드가 추가 된 후 속성을 설정하여 부모 좌표 시스템 내에 이 배치됩니다. 노드 좌표계는 xScale, yScale 및 zRotation 속성을 변경하여 크기를 조정하고 회전 할 수 있습니다. 노드의 좌표계가 축척되거나 회전 될 때이 변환은 노드 자체의 내용과 노드의 자손에 모두 적용됩니다 ( ). 내가 올바르게 읽고 있어요 경우 Source

는 다시, 노드는 노드 트리에 추가 될 때 그것은 부모가 좌표계의 상속 것으로 보인다. 따라서 기본적으로 containerNode은이 경우 self과 같은 크기입니다. 또한 SKNode의 frame 속성에 따라

: 고려 노드의 엑스 스케일, yScale 및 zRotation 특성을 고려

프레임이 노드의 내용을 포함하는 작은 직사각형이다 . 다시 프레임을 설정되지 않은 경우 같은 소리 Source

(이 경우에 self 또는 잘 모르겠어요 containerNode의 어린이 있음을 알 수 있습니다) 가장 작은 사각형을 필요가 자신의 프레임입니다한다.

사례가 무엇이든 다른 SKNode로부터 상속됩니다.

+2

'SKNode'는 크기가 없기 때문에 부모로부터 크기를 상속받을 수 없다. 또한'frame'의'origin' (position) 속성 만이'SKNode'에 사용됩니다. 프레임의'size' 속성은 항상 (width : 0, height : 0)입니다. – Epsilon

3

SKNode은 렌더링되지 않으므로 size 속성이 필요하지 않습니다. 표시되는 SKNode 하위 클래스 (SKLabelNode, SKShapeNode 등)에는 크기 (명시 적으로 선언되거나 암시 적으로 계산 된 크기)가 필요합니다. 예를 들어, SpriteKit은 제대로 렌더링하려면 SKSpriteNode의 크기와 20x20 텍스처를 알아야합니다.SKNodecalculateAccumulatedFrame 메소드를 사용하여 해당 노드 트리의 모든 자손 (기타 SKNode 제외)의 Q 크기 (직사각형)를 판별 할 수 있습니다.