# Wie Ball programmieren, der im 4 Eck rum fliegt



## SexyPenny90 (28. Mrz 2012)

Hallo,

ich möchte ein Programm erstellen in dem ein Ball auf der Programm Oberfläche rumfliegt, und eben an den Rändern des Fenster mit Einfallswinkel=Ausfallswinkel abprallt.
Die Oberfläche hab ich schon Programmiert, jedoch weiß ich jetzt nicht wie ich weiter machen soll.
Ich habe leider keine Ahnung, wie ich es mache, dass der Ball sich bewegt.
Muss ich in eine Thread jeweils die x und y Komponente des Balls ändern?

mfg

Penny


----------



## Marco13 (28. Mrz 2012)

SexyPenny90 hat gesagt.:


> Muss ich in eine Thread jeweils die x und y Komponente des Balls ändern?


Klingt nach einem Plan


----------



## AngryDeveloper (28. Mrz 2012)

Kannst dir das 2D Spiele Tutorial von Quaxli angucken:
http://www.java-forum.org/spiele-multimedia-programmierung/54795-quaxli-2d-spiele-tutorial.html

Dann solltest du das auch hinbekommen.


----------



## SexyPenny90 (28. Mrz 2012)

habs hinbekommen.

Habe jetzt wirklich 2 Threads, ein für x-richtung und ein für y-Richtung, somit kann ich dann auch den Winkel ändern...


----------



## Marco13 (28. Mrz 2012)

Das ist meiner Interpretation nach der Unterschied zwischen
_Muss ich in einem Thread jeweils die x und y Komponente des Balls ändern?_ und
_Muss ich in jeweils einem Thread die x und y Komponente des Balls ändern?_

Du hast letzteres gemacht, aber es sollte EIN Thread für x und y reichen. Und die Richtung kann man dauch damit ändern. Die Aktuelle Richtung könnte z.B. in einem Point2D.Double gespeichert sein.


----------



## André Uhres (29. Mrz 2012)

SexyPenny90 hat gesagt.:


> Muss ich in eine Thread jeweils die x und y Komponente des Balls ändern?


Hallo Penny,

für diese Anwendung würde ich eher einen Swing Timer benutzen.

Gruß,
André

(Quellcode im jar)


----------



## Kanitrino (4. Apr 2012)

Hallo Penny,

Du brauchst eine Schleife (while(boolean b)), die z. B. mit mit "Thread.sleep(50)" msec auf eine bestimmte Anzahl von Durchläufen pro Sekunde (z. B. 50 msec = 20 Bilder pro Sekunde) eingestellt wird.

Dann brauchst Du eine paint()-Methode, in dem ein Kreis mit (int) x und y als Variablen gezeichnet wird
g. fillOval(x, y, 20, 20);

Dann musst Du in jedem Umlauf x und y neu berechnen. Wenn der Ball geradeaus fliegt z. B.
x = x+(1*vzx);
y = y+(2*vzy);  

int vz soll "Vorzeichen" heißen und ist entweder 1 oder -1. Wenn der Ball abprallt, ändert sich nur das Vorzeichen vz. Wann das der Fall ist, musst Du mit einer if-Anweisung abfragen
if(x<0) vzx = 1;
if(x>300) vzx = -1;

Ich hab's auch schon programmiert : Huepfball


----------



## SexyPenny90 (4. Apr 2012)

Danke, werd jetzt mal ein bisschen rumprobieren

Aber grobe Frage hat sich erledigt


----------

