확대/축소 가능하고 물리적인 바디가있는 레벨이 포함 된 SpriteKit 게임을 만들려고합니다. 줌 레벨이 변경 될 때 예상치 못한 이상한 일이 발생하게되어 물리학 세계는 행동하지 않습니다.SKPhysicsWorld 스케일 노드의 물리 시뮬레이션
물리 본문이있는 노드는 예상대로 애니메이션을 적용하고 작동합니다. 레벨을 확대하는 것은 모든 게임 요소가 포함 된 단일 '세계 노드'의 크기를 조정하는 집게 제스처로 처리됩니다. 이것은 장면을 스케일링 할 때 끔찍한 일을하는 것처럼 보이며, 월드 노드 상단에있는 게임 인터페이스 요소에 대해 확장되지 않은 노드를 쉽게 추가 할 수 있기 때문에이를 처리하기위한 편리한 방법입니다.
줌은 다음과 같이 작동합니다 : 일반 줌 레벨에서, 모든 위대한, 시각적으로 작동 할 때, 모든뿐만 아니라 다른 줌 레벨에서 잘 보이는
- (void) handlePinchGesture:(UIPinchGestureRecognizer *) gesture {
if (gesture.state == UIGestureRecognizerStateChanged) {
[self.worldNode runAction:[SKAction scaleBy:gesture.scale duration:0.0]];
gesture.scale = 1;
}
}
. 문제는 확대/축소가 변경되면 피직스 바디가 다른 오브젝트와 비교하여 동일한 속도가 아닌 동일한 속도로 계속 이동한다는 것입니다. 결과적으로 더 많은 장면을보기 위해 축소 할 때 모든 것이 훨씬 빠르게 움직입니다.
이것은 물리 세계가 장면에만 연결되어 있으며 '세계 노드'의 조정 된 크기를 인식하지 못하는 부작용 인 것으로 보입니다. 물리 물리 체가 상대 공간에서 노드를 동일한 속도로 계속 움직여야하지 않습니까?
SpriteKit의 작동 방식이나 해결 방법에 대해 누구나 통찰력을 줄 수 있습니까?
오 마이. 나는 씬을 자식 노드로 추가하는 것에 대해서는 생각하지 않았습니다. 이것은 완벽한 해결책 일 수 있습니다. 합리적인 것만으로 볼 상자를 축소하면 모든 볼이 여전히 작은 상자에서 정상적으로 작동하지만, 일부 작은 볼이 큰 볼과 상호 작용하려고하면 즉시 중단됩니다. –
터치 포인트 주변을 멋지게 확대 할 장면을 얻으려면 약간의 미세 조정이 필요 하겠지만, 오, 물리학! 장면에 스케일을 설정하는 것은 유효한 액션이 아닙니다.'self.size = CGSizeMake (self.size.width/gesture.scale, self.size.height/gesture.scale); –
예, 죄송합니다. 장면에서 크기를 사용하고 scaleMode를 SKSceneScaleModeAspectFill로 설정했습니다. –