2017-02-15 8 views
1

SKPhysicsBody(edgeLoopFrom:...)으로 생성 된 큰 사각형 SKPhysicsBody가 있습니다. 그 물리학 몸 안에는 주위에 튀는 공들이 있습니다. 알림이 나타나면 화면 하단에서보기를 표시합니다. SKPhysicsBody의 크기를 조정하여 화면에있는 동안 공이이 알림보기에서 튀어 나오도록하려고합니다.SKPhysicsBody 가장자리의 크기를 조절하고 아이들을 안에 넣으십시오

내가 지금 할 것은 즉

func updateWalls() { 
    let wallInsets = UIEdgeInsetsMake(bottomWallInset, 0, 0, 0) 
    scene.physicsBody = SKPhysicsBody(edgeLoopFrom:UIEdgeInsetsInsetRect(bounds, wallInsets)) 
} 

난 그냥 새로운 크기로 새로운 하나 기존의 물리학 본체를 교체합니다. 이것은 기존의 치수와 새로운 치수 사이의 영역에 어떤 볼이 인 경우를 제외하고는이 갇혀 벽 바깥으로 튀어 나와 세계에서 떨어지는 것을 제외하고는 작동합니다.

구형 벽과 새 벽 경계 사이의 전환을 애니메이션으로 전환하여 바닥에있는 볼을 새 치수로 "스윕"하여 벽 안쪽에 유지하도록하는 우아한 방법이 있습니까? You can't scale an SKPhysicsBody directly.

답변

1

이 경우 물리적 본문의 크기를 조정하는 대신 알림을 나타내는 노드를 만드는 것이 더 쉽습니다. 즉, 아무 것도 렌더링하지 않는 SKNode를 만들고, 알림보기와 동일한 크기로 물리 본문을 첨부하고 노드를 알림보기와 함께 이동하십시오. 뷰가 움직이는 것과 동일한 속도로 노드 이동을위한 애니메이션을 생성 할 수 있습니다. 이렇게하면 물리 시뮬레이션을 혼동 할 가능성을 낮추면서 필요한 효과를 얻을 수 있습니다.

0

SpriteKit은 physicsBody가 동일하게 유지되지 않기 때문에 항상 SKPhysicsBody의 스케일링에 문제가 있습니다. physicsBodies 속성간에 "연속성"이 없습니다. 그래서 이것은 좋은 방법이 아닙니다.

내가 노드와 physicsBodies 구별에주의를 집중하려는

: 그것은 physicsBody있어 당신은이 벽을 구축 할 수 있고 당신이 그들 중 하나를 필요로하지 않을 때 노드를 숨길 ishidden = true을 만들 수 및 물리학을 사용하지 isDynamic = false 설정 상호 작용. 그래서 한 번 당신은 내부 벽을 몸으로 숨기고, 내부를 숨기고, 물리학 상호 작용을 비활성화하고, 물리학으로 외부 벽을 사용할 수있게합니다.

이전 경계와 새 경계 사이의 전환에 대해 두 노드 사이의 애니메이션을 연구 할 수 있습니다.

+0

도움 주셔서 감사합니다. 두 물리학 사이의 전환은 내가 지금 가지고있는 것과 동일 할 것입니다. 여기서 나는 하나를 다른 물리로 대체합니다. 나는 아직도 애니메이션을하는 방법에 붙어있다. – bcattle

+0

physicsBody를 내부 노드로 설정 해제 한 다음 내부 노드를 사용하여 애니메이션을 만들고 외부 벽과 동일하게 만듭니다 (physicsBody는 제외). 마지막에 숨 깁니다 (외부 노드를 표시합니다). 결국 숨겨진 내부 노드를 원래 차원으로보고하십시오. –