Objekte im Kreis anordnen 2D

C

coreytaylor211

Fortgeschrittenes Mitglied
5
Hallo ich wieder das eine Problem ist gelöst das nächste tritt auf.
Ich versuche eine beliebige Anzahl von Objekten in einem Kreis anordenen zu lassen, den Code habe ich soweit nur führt es nicht zum gewünschten Ergebniss.
Ich denke einfach mal das ich irgendwo einen Denkfehler drin habe, hier mal der Code:
Code:
    MyGdxGame mg = new MyGdxGame();
                float[] mc = new float[mg.ballCount];
                speedX = 0.5f;
                speedY = 0.5f;
                double Winkel =  360 / mg.ballCount;
                double Radius = 45/2;
                double StartX = 1000;
                double StartY = 1000;
               
                for (int i = 0; i < mg.ballCount; i++)
                {
                    double calcangle = Winkel * i;
                    mc[i] = (float) (StartX + Math.cos(calcangle * Math.PI / 180) * Radius);
                    mc[i] = (float) (StartY + Math.sin(calcangle * Math.PI / 180) * Radius);

                    Gdx.app.log("MidPosX", String.valueOf(tarx));
                    Gdx.app.log("MidPosY", String.valueOf(tary));
                }

sorry für das Durcheinander ist alles nur Probe momentan. Wie stelle ich das jetzt am besten an das die mc Werte mit den alten x und y Kordis ausgetauscht werden ?

vielen Dank schnmal
 
Das Problem ist ja wenn ich einfach sage
Code:
x = mc[i]
dann kommt da nur mist raus. Hab auch schon versucht das mit einer schleife zu lösen geht auch nicht.
 
@Jaiel Ich hatte da an deine genialität gedacht!? Du gibst immer sehr gute Ratschläge, Lösungen und Tipps.
 
  • Danke
Reaktionen: Jaiel
Das funktioniert so grundsätzlich, aber

1) Was soll denn in mc [ i ] stehen? Derzeit überschreibst du mc [ i ] direkt mit der zweiten Berechnung für die Y-Koordinate.
2) Was ist tarx und tary?

Und schreib mal
double Winkel = 360.0 / mg.ballCount
double Radius = 45.0 / 2;
 
  • Danke
Reaktionen: coreytaylor211 und Jaiel
Moin Ja hab auch schon gesehen das war natürlich doof. Hier mal der neue Code
Code:
    MyGdxGame mg = new MyGdxGame();
                speedX = 0.5f;
                speedY = 0.5f;
                double Winkel =  360.0 / mg.ballCount;
                double Radius = 45.0 / 2;
                double StartX = 1000;
                double StartY = 1000;
               
                for (int i = 0; i < mg.ballCount; i++)
                {
                    double calcangle = Winkel * i;
                    x = (float) (StartX + Math.cos(calcangle * Math.PI / 180) * Radius);
                    y = (float) (StartY + Math.sin(calcangle * Math.PI / 180) * Radius);

                    Gdx.app.log("MidPosX", String.valueOf(x));
                    Gdx.app.log("MidPosY", String.valueOf(y));
                }

So und hier einmal was logcat sagt:
Code:
03-07 10:08:19.471 18127-18127/de.androidappdev D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1022.5
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1000.0
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1022.3226
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1002.82
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1021.7931
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1005.5955
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1020.92
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1008.2828
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1019.7169
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1010.8395
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1018.2029
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1013.22516
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1016.4018
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1015.4023
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1014.34204
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1017.33655
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1012.0561
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1018.9974
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1009.58
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1020.3586
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1006.9529
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1021.39874
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1004.21606
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1022.10144
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1001.4128
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1022.4556
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 998.5872
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1022.4556
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 995.78394
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1022.10144
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 993.0471
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1021.39874
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 990.42
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1020.3586
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 987.9439
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1018.9974
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 985.65796
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1017.33655
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 983.5982
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1015.4023
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 981.7971
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1013.22516
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 980.2831
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1010.8395
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 979.08
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1008.2828
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 978.2069
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1005.5955
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 977.6774
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1002.82
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 977.5
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 1000.0
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 977.6774
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 997.18
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 978.2069
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 994.4045
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 979.08
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 991.7172
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 980.2831
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 989.1605
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 981.7971
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 986.77484
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 983.5982
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 984.5977
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 985.65796
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 982.66345
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 987.9439
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 981.0026
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 990.42
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 979.6414
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 993.0471
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 978.60126
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 995.78394
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 977.89856
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 998.5872
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 977.5444
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1001.4128
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 977.5444
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1004.21606
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 977.89856
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1006.9529
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 978.60126
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1009.58
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 979.6414
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1012.0561
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 981.0026
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1014.34204
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 982.66345
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1016.4018
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 984.5977
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1018.2029
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 986.77484
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1019.7169
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosY: 989.1605
03-07 10:08:19.471 18127-18327/de.androidappdev I/MidPosX: 1020.92
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 991.7172
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1021.7931
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 994.4045
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1022.3226
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 997.18
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1022.5
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1000.0
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1022.3226
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1002.82
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1021.7931
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1005.5955
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1020.92
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1008.2828
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1019.7169
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1010.8395
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1018.2029
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1013.22516
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1016.4018
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1015.4023
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1014.34204
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1017.33655
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1012.0561
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1018.9974
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1009.58
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1020.3586
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1006.9529
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1021.39874
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1004.21606
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1022.10144
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1001.4128
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1022.4556
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 998.5872
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1022.4556
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 995.78394
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1022.10144
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 993.0471
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1021.39874
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 990.42
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1020.3586
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 987.9439
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1018.9974
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 985.65796
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1017.33655
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 983.5982
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1015.4023
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 981.7971
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1013.22516
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 980.2831
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1010.8395
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 979.08
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1008.2828
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 978.2069
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1005.5955
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 977.6774
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1002.82
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 977.5
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 1000.0
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 977.6774
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 997.18
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 978.2069
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 994.4045
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 979.08
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 991.7172
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 980.2831
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 989.1605
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 981.7971
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 986.77484
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 983.5982
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 984.5977
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 985.65796
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 982.66345
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 987.9439
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 981.0026
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 990.42
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 979.6414
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 993.0471
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 978.60126
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 995.78394
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 977.89856
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 998.5872
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 977.5444
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1001.4128
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 977.5444
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1004.21606
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosY: 977.89856
03-07 10:08:19.481 18127-18327/de.androidappdev I/MidPosX: 1006.9529

Das Problem ist das die Bälle teilweise verschwinden, und da ordnet sich leider nix.
Aber rein von den Daten her müsste das doch gehen oder ?
 
Die Zahlen decken sich mit denen, die ich in meinem kurzen Testprogramm (allerdings nicht mobil und in C#) habe. Von daher sollte es passen.

Wenn ich dann für die Koordinaten einfach mal ein Pixel in einem Bitmap setze, sehe ich auch, wie das ein Kreis wird (siehe Bild unten rechts).
 

Anhänge

  • balls.png
    balls.png
    369 Bytes · Aufrufe: 313
Zuletzt bearbeitet:
  • Danke
Reaktionen: coreytaylor211 und Jaiel
@Thyrion ich sehe das Bild irgendwie nicht :confused2:

@coreytaylor211 Was genau meinst du mit die Bälle verschwinden Teilweise und ordnen sich nicht an?!
 
  • Danke
Reaktionen: coreytaylor211
@Jaiel l bei dem Bild unten rechts kann man den Kreis sehen is ziemlich klein.
Ja die Bälle verschwinden halt nur teilweise ^^, aber das liegt an der schleife weil er jetzt die x und y kordis direkt zeichnet.

Mein Problem liegt jetzt nur noch darin das sich die Bälle nicht aus der Bewegung heraus zum Kreis ordnen sondern wie oben schon gesagt direkt gezeichnet werden.
 
  • Danke
Reaktionen: Jaiel
Ahhh. Jetzt habe ich es gesehen. Musste bei mir runterscrollen.

Verstehe leider nicht ganz was du erreichen möchtest :(
 
  • Danke
Reaktionen: coreytaylor211
Hmm ok wie erkläre ich das am besten...

Also sagen wir mal wir haben 20 Bälle die fliegen jetzt (2D) gesehen auf dem Display rum. Prallen überall ab u.s.w wenn ich jetzt auf den Display tippe sollen alle Bälle die neuen x und y kordis von der Kreis Berechnung annehmen.

Dann sollen sich die Bälle auf den Weg machen um den Kreis zu bilden, was bei mir ja momentan leider noch nicht geht.
Bei mir rollen die Bälle nicht sondern werden direkt als Kreis gezeichnet, und das auch nur wenn ich die schleife
Code:
                for (int i = 0; i < mg.ballCount; i++)
                {
                    double calcangle = Winkel * i;
                    x = (float) (StartX + Math.cos(calcangle * Math.PI / 180) * Radius);
                    y = (float) (StartY + Math.sin(calcangle * Math.PI / 180) * Radius);

                    Gdx.app.log("MidPosX", String.valueOf(x));
                    Gdx.app.log("MidPosY", String.valueOf(y));
                }
durchlaufen lasse. (endlos)
Dadurch ensteht ja so zu sagen der Kreis weil die Bilder so schnell neu gezeichnet werden das es wie ein Kreis aussieht.

Also ich hoffe das war verständlich :confused2::rolleyes2:
 
Also die Bälle sind erst mal einfach Random über den Bildschirm verstreut und bewegen sich irgednwie. Wenn du klickst sollen die sich auf den Weg machen und ihre Positionen annehmen? Also soll sozusagen eine Kraft auf die Bälle wirken die sie in die Position drückt und nciht einfach auf ihre Positionen "teleportiert"?

In dem Fall könntest du die Position die ein Ball annehmen soll als Gravitationspunkt für diesen Ball nehmen(Beschleunigung einfach per Sinus Kosinus zu den x,y-Geschwindigkeiten dazurechnen, so hast du eine geschmeidige Bewegung. Für das richtige Positionieren am Ende, gibt es viele Ansätze um Tunneleffekte zu vermeiden. Ich würde empfehlen die Geschwindigkeit der Bälle in dieser Phase immer um 10% pro Sekunde oder so zu verringern, damit die Bälle nicht in irgendwelche orbitalen Bahnen um die Position gelangen)

Oder einfach die bälle darauf zusteuern lassen, also derzeitige Geschwindigkeiten auf 0 setzen und die Geschwindigkeiten neu berechnen um sie auf die Psoitionen hin bewegen zu lassen

Wie funktioniert denn deine kleine Engine für die Bälle eig?

(war hoffentlich nicht zu verwirrend geschrieben :( )
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: coreytaylor211
Ja genau so meinte ich das.
Ja das hört sich doch schon einmal gut da wäre ich nie drauf gekommen, ich werde mal ein bisschen basteln und dann berichten wie weit ich gekommen bin.
Wie meinst du das wie die kleine Engine funktioniert ? Was möchtest du Wissen ?
 
Soo also ich habe das jetzt mal versucht was du gesagt hast, sprich einfach mal die Geschwindigkeit auf 0 und dann neu berechnet. Das Problem an der Sache ist aber das alle Bälle in die gleich Richtung rollen.
Hat einer eine Idee was ich da machen kann ?

Hier ist nochmal der Code:
Code:
    MyGdxGame mg = new MyGdxGame();
                speedX = 0.5f;
                speedY = 0.5f;
                double Winkel =  360.0 / mg.ballCount;
                double Radius = 45.0 / 2;
                double StartX = 1000;
                double StartY = 1000;
              
                for (int i = 0; i < mg.ballCount; i++)
                {
                    double calcangle = Winkel * i;
                    x = (float) (StartX + Math.cos(calcangle * Math.PI / 180) * Radius);
                    y = (float) (StartY + Math.sin(calcangle * Math.PI / 180) * Radius);

                    Gdx.app.log("MidPosX", String.valueOf(x));
                    Gdx.app.log("MidPosY", String.valueOf(y));
                }
also irgenwie glaube ich das die kordis nicht alle genutzt werden, sondern nur die 1 oder die letzten von dem schleifendurchlauf.
 
Zuletzt bearbeitet:
Deswegen meine frage wie deine Engine abläuft. wie läuft das genau ab bei dir mit deinem System?

Im Grunde: Wenn du den Button drückst oder was auch immer und es zur Berechnung kommt, dann gehst du einfach in diese Phase des Anordnens über(vllt ein Flag benutzen, als ein boolean der anzeigt dass man gerade in der Phase ist, ist auch besser für die Kollisionserkennung damit die Bälle auch anhalten an ihren Endpositionen).

Du gehst einmalig durch alle Bälle durch und setzt deren individuelle Bewegungsrichtung, bzw Geschwindigkeit abhängig von ihrer Position zur Endposition.

Wenn du den Bällen eine Geschwindigkeit von V gegeben hast und der Endpunkt liegt bei X,Y , der Ball ist bei bX,bY dann einfach folgende Rechnung durchführen:

bVX,bVY - Ballgeschwindigkeit in x,y


double h=Math.sqrt((bX-X)*(bX-X)+(bY-Y)*(bY-Y));
bVX= V*(X-bX)/h; //V*cos einfach
bVY= V*(Y-bY)/h; //V*sin einfach
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: coreytaylor211
Also hier mal der grobe Ablauf in der create
Code:
        updater = new PauseableThread(new Runnable() {

            long timeAnt = System.currentTimeMillis();
            long timeAct = timeAnt;

            @Override
            public void run() {

                while(running){
                    try{
                        Thread.sleep(sleepTime);
                    }catch (InterruptedException e){}
                        timeAct = System.currentTimeMillis();

                        for(Ball b: balls){

                            //Platzhalter
                            for (Ball k:balls){
                                float x = k.x;
                                float y = k.y;
                                float tsx = k.speedX;
                                float tsy = k.speedY;
                                for (Ball j: balls){
                                    if (k==j) continue;
                                    float tempX = j.x;
                                    float tempY = j.y;
                                    float temsx = j.speedX;
                                    float temsy = j.speedY;

                                    j.kollision(x,y,tempX,tempY,temsx,temsy);
                                    b.kreistest(j.isRun);
                                }
                            }

                            b.onManagedUpdate((timeAct - timeAnt * 1f));
                        }
                        updates++;
                        timeAnt=timeAct;
                }
            }
        });

        updater.start();

in der for schleife wird dann b.kreistest(j.isRun) aufgerufen. So soll der grobe Ablauf sein. Ich gehe mal davon aus das ich hier irgendwo einen Denkfehler drin habe.
[doublepost=1457469719,1457463556][/doublepost]Ok ich weiß nicht ob ich das jetzt richtig verstanden habe ? hier einmal was ich jetzt gerechnet habe.
Code:
            for (int i = 0; i < mg.ballCount; i++)
            {

                double calcangle = Winkel * i;
                    x = (float) (StartX + Math.cos(calcangle * Math.PI / 180) * Radius);
                    y = (float) (StartY + Math.sin(calcangle * Math.PI / 180) * Radius);
                    float delPosX = alt_x-x;
                    float delPosY = alt_y-y;
                    float delPos = (float)(Math.sqrt(delPosX*delPosX+delPosY*delPosY));
                    float bVX = speedX*delPosX/delPos;
                    float bVY = speedY*delPosY/delPos;

                    if (alt_x!=x){

                        speedX = bVX-x;
                    }

                    if (alt_y !=y){
                        speedY = bVY-y;
                    }

                Gdx.app.log("MidPosX", String.valueOf(x));
                Gdx.app.log("MidPosY", String.valueOf(y));
                Gdx.app.log("speedx", String.valueOf(speedX));
                Gdx.app.log("speedy", String.valueOf(speedY));

            }

Ich weiß nicht ob ich das richtig verstanden habe, blicke da nicht mehr durch :(
wenn ich jetzt auf den Bildschirm tippe verschwinden alle Bälle hintereinander nur 1 bleibt.
 
Man sieht das es etwas zu durcheinander ist :(

Ich kann dir morgen mal eine kleine Engine als Beispiel schreiben, mehr ein Grundgerüst. Jetzt ist schon etwas spät.

Aber soweit: Da bei der Abfrage ob die Zielkoordinaten erreicht sind(if (alt_x!=x)) da ziehst due bVx, also die Geschwindigkeit von x ab?! und mit speedX/Y machst du auch nichts?!

Zur Not am Besten nochmal zurück zum Papier und von vorne Planen...

Oder ich sehe da libGDX als Grafikframework. warum dann nicht Box2D benutzen? :)

Jaiel
 
Zuletzt bearbeitet:
Hmmm ich weiß auch nicht mehr weiter. Ist warscheinlisch schon zu spät.
Box2D ? was ist das schönes ?
 
Eine 2D Physikengine die in libGDX sehr gut integriert ist.
 
Hört sich sehr gut an ! Ich muss mich mal mehr mit libgdx auseinander setzten.
 

Ähnliche Themen

P
Antworten
9
Aufrufe
1.933
pseudopat
P
C
  • coreytaylor211
Antworten
7
Aufrufe
2.404
coreytaylor211
C
Y
  • yolonaut
Antworten
1
Aufrufe
925
Jaiel
Jaiel
Zurück
Oben Unten