2016-08-17 8 views
1

私のゲームでは、重力によって影響を受けるボールをいくつか作り出しています。ゲームが始まると、彼らは画面外から落ち、底に彼らの場所を得ます。他の力はそれらに加えられません。毎回異なる結果を出すSpriteKitの物理学

問題は、正確な座標でこれらのボールを作成していることです。以前のような正確な物理属性ですが、結果は同じではありません。それは類似しているが同じではない。しかし、私はいつも同じ値になっているので、まったく同じであるべきだと思います。

以下の3つの写真で私が言ったことを理解することができます。 enter image description hereenter image description hereenter image description here

なぜこのようなことが起こっているのでしょうか?どうすれば解決できますか?

これは私がスプライトノードを作成する方法である:

BallSpriteNode *sprite = [BallSpriteNode spriteNodeWithTexture:ballTexture]; 
sprite.xScale = scale; 
sprite.yScale = scale; 
sprite.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:sprite.size.width/2]; 
sprite.physicsBody.density = 1.0f; 
sprite.physicsBody.restitution = 0; 
sprite.physicsBody.dynamic = YES; 
sprite.physicsBody.categoryBitMask = ballHitCategory; 
sprite.physicsBody.contactTestBitMask = ballHitCategory; 
sprite.physicsBody.collisionBitMask = ballHitCategory; 

CGPoint startPosition = CGPointMake(xPosition, yPosition); 
sprite.position = startPosition; 

[bounceScene addChild:sprite]; 
+0

毎回正確な結果が必要な場合は、物理エンジンに何が起こるべきかを判断させないでください。あなた自身の手でコントロールしてください。オブジェクトを初期位置に配置するまで、物理エンジンを無効にします。次に、SKActionsを使用して適切な場所にオブジェクトを移動します。その後、それらのオブジェクトで物理学のボディを再び有効にすることができます。 – Whirlwind

+0

それは私のための選択肢ではありません私は複数のレベルを持っており、各レベルでボールの順序の異なるセット。私はすべての異なる状況のためにそれをすることはできません。物理は一貫して動作するはずです。 – mkeremkeskin

+0

だからどこに問題がありますか?各オブジェクトの開始位置の配列を作成します(またはボールの開始位置を表すボールごとにCGPointを定義します)。物理エンジンに頼ることはできません。 – Whirlwind

答えて

2

物理エンジンが少ないランダム作りに関与する因子がたくさんあります。

FPSはランダム性に大きな影響を与えます。 SKSpriteKit Physicsでは、SKSceneにUpdateメソッドがあり、これは1フレームごとに1回呼び出され、前のフレームとの時差を持ちます。通常はランダム化を少なくするために、メソッドをオーバーライドする必要があります。

カスタマイズ可能な他の物理エンジン(Bullet Physics)を使用してください。 StepSimulation関数呼び出しを調整するだけで同じ結果を得ることは非常に簡単です。

関連する問題