ズームインおよびズームアウトできる物理体のレベルを含む SpriteKit ゲームを構築しようとしています。ズーム レベルを変更すると、物理の世界が期待どおりに動作せず、奇妙なことが起こります。
物理ボディを持つノードがアニメーション化し、期待どおりに動作します。レベルのズームは、すべてのゲーム要素を含む単一の「ワールド ノード」のスケールを調整するピンチ ジェスチャで処理されます。これは、シーンのスケーリングが恐ろしいことを行うように見えるため、これを処理する便利な方法であり、ワールド ノードの上に任意のゲーム インターフェイス要素用の個別のスケーリングされていないノードを簡単に追加できます。
ズームは次のように機能します。
- (void) handlePinchGesture:(UIPinchGestureRecognizer *) gesture {
if (gesture.state == UIGestureRecognizerStateChanged) {
[self.worldNode runAction:[SKAction scaleBy:gesture.scale duration:0.0]];
gesture.scale = 1;
}
}
通常のズーム レベルでは、すべてがうまく機能し、視覚的には、さまざまなズーム レベルでもすべてがうまく見えます。問題は、ズームが変更されると、物理体が他のオブジェクトに対して同じ速度ではなく、同じ速度で移動し続けることです。その結果、シーンをより多く表示するためにズームアウトすると、すべてがはるかに速く移動します。
これは、物理ワールドがシーンにのみ接続されており、「ワールド ノード」の調整されたスケールを認識していないという事実の副作用のようです。ただし、物理体は相対空間内でノードを同じ速度で移動し続ける必要がありますか?
SpriteKit がそのように動作する理由、またはこれを回避する方法について、誰かが洞察を提供できますか?