2016-08-17 4 views
1

In meinem Spiel erstelle ich einige Kugeln, die durch Schwerkraft bewirkt werden. Wenn das Spiel beginnt, fallen sie aus dem Bildschirm und bekommen ihre Plätze unten. Keine andere Kraft wird auf sie angewendet.SpriteKit Physik gibt jedes Mal andere Ergebnisse

Das Problem ist, ich erstelle diese Kugeln mit genauen Koordinaten, genaue Physik Attribute wie vorherige, aber das Ergebnis ist nicht das gleiche. Es ist ähnlich, aber nicht gleich. Aber ich denke, es sollte genau so sein, denn zu jeder Zeit sind die Werte gleich.

Sie können verstehen, was ich in diesen 3 Bildern unten gesagt habe. enter image description hereenter image description hereenter image description here

Haben Sie eine Idee, warum das passiert? Wie kann ich es lösen? Diese

ist, wie ich die Sprite-Knoten erstellen:

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

Wenn Sie jedes Mal genaue Ergebnisse wollen, lassen Sie die Physik-Engine nicht bestimmen, was passieren soll. Nehmen Sie eine Kontrolle in Ihren eigenen Händen. Bedeutet, deaktivieren Sie die Physik-Engine, bis Sie Objekte an ihren ursprünglichen Positionen platzieren. Verwenden Sie dann SKActions, um Objekte gegebenenfalls zu verschieben. Danach können Sie Physikkörper für diese Objekte wieder aktivieren, und Sie können loslegen. – Whirlwind

+0

Es ist keine Option für mich Ich habe mehrere Level und in jedem Level verschiedene Bällchenreihenfolge. Ich kann es nicht für jede andere Situation tun. Die Physik sollte sich konsequent verhalten. – mkeremkeskin

+0

Wo ist das Problem? Machen Sie für jedes Objekt ein Array von Startpositionen (oder definieren Sie einen CGPoint pro Ball, der seine Startposition darstellt). Sie können sich nicht auf die Physik-Engine verlassen, wie Sie es möchten. – Whirlwind

Antwort

2

Es gibt viele Faktoren beteiligt eine Physik-Engine weniger zufällig zu machen.

Die FPS hat großen Einfluss auf die Zufälligkeit. In SKSpriteKit Physics haben Sie in der SKScene eine Update-Methode, die einmal pro Frame aufgerufen wird und die Zeitdifferenz zu den vorherigen Frames trägt. Um es weniger zufällig zu machen, muss man die Methode irgendwie überschreiben.

Oder verwenden Sie andere Physik-Engines, die anpassbar sind (Bullet Physics). Es ist sehr einfach, dasselbe Ergebnis zu erhalten, indem nur der Funktionsaufruf StepSimulation angepasst wird.

Verwandte Themen