Also habe ich versucht, eine Physik-Simulation zu programmieren. Ich beginne klein, indem ich einen freien Fall simuliere. Ich verwende Java Jframe und einige Methoden aus der AWT-Bibliothek in Java. Das Problem, mit dem ich konfrontiert wurde, ist jedoch die Anpassung der Parameter, um meine Simulation lebensechter zu machen. Mein Spiel while-Schleife läuft mit konstanten 60 FPS, was bedeutet, dass jede Schleife 16 ms dauert. Jedes Mal, wenn ich aktualisieren, ich diese Gesetze:Physik-Simulation, Pixel zu Metern anpassen?
this.velX = this.velX + (accX)*delta;
this.velY = this.velY + (accY) * delta ;
this.velY = this.velY * 0.9;
this.x = this.x + (int) ((this.velX) * delta);
this.y = this.y + (int) ((this.velY)* delta);
Da ich aber in int bin konvertieren, werden die Werte immer wieder auf 0 bekommen, da sie so klein sind. Und die Zeichenmethoden für die Formen akzeptieren nur int (was ich für verständlich halte, oder?). Ich habe mich gefragt, ob es dafür eine Lösung geben würde. Der Ball würde stecken bleiben und seine Bewegung wäre nicht spürbar (wenn er sich überhaupt bewegt).
Ich habe versucht, Delta als 1 zu übergeben, und es hat gut funktioniert, aber es ist zu schnell obwohl und ich glaube nicht, dass es realistisch ist. Daher wäre es sehr hilfreich, wenn jemand mir allgemeine Ideen zu einem solchen Problem geben könnte. So sollten die Gleichungen werden
this.x = this.x + (int) deltaX;
this.y = this.y + (int) deltaY;
Jetzt
"16 ml Sekunden" - 16 Milliliter Sekunden ?? Ich denke, das sollte "ms" = Millisekunden sein? – Fildor
Es hört sich so an, als ob du deine Koordinaten von dem Ort liest, an dem sie gerendert werden - das ist genau die Ursache für dein Problem in meinen Augen. Versuchen Sie, Koordinaten in einem bestimmten Objekt zu speichern, das sie in der Form annehmen kann, in der Sie sie auch wirklich benötigen (d. H. In "double" oder was auch immer) und dann nur in "int" umwandeln. –
Ja, sorry, ich habe es bearbeitet. – Robot0110