# Ball programmieren



## unknown_member (21. Feb 2007)

Hallo!

Ich möchte einen Ball programmieren, der gegen die Bildschirmrände stoßen und abprallen kann, gegen andere Gegenstände ebenso abprallen kann und Bogen fliegt. Wie ein richtiger Ball eben.
Leider habe ich davon keine Ahnung. Weiß irgendjemand, wie ich das realisieren kann?

thx, unknown_member


----------



## Marco13 (21. Feb 2007)

Und weiter gehts :roll:


----------



## unknown_member (21. Feb 2007)

Vielen Dank, wenn du mir auch hier helfen kannst.


----------



## Chris_1980 (21. Feb 2007)

LOL, du bist echt lustig. :lol:  

Also ich möchte dir ja den spaß selbst zu googlen nicht nehmen, daher einfach nur der Tip: 
Es gibt mit Sicherheit irgendwo ein Tutorial dazu. Abgesehen davon, meinst du nicht, es wäre ganz sinnvoll mal ein Buch zu dem ganzen Kram zu lesen? Dieses ist kostenlos und wirklich hilfreich: www.javabuch.de


----------



## Evil-Devil (21. Feb 2007)

Öhm...ich appeliere hier mal an den eigenen Verstand...

Ball.x > AufprallObjekt.x dann tu was
Ball.y > AufprallObjekt.y dann tu was

Nur um es mal für die eine Richtung aufzuzeigen. Den rest kann man mit einfacher Mathematik selbst einrichten. Ideal ist es natürlich, wenn du bei jeder Bewegung die Position die der Ball in der nächten Bewegung hätte berechnest und anhand dieser auf eine etwaige Kollision prüfst. Sonst kann es passieren das der Ball inmitten deines Objektes abprallt. Das sieht gelinde gesagt schlecht aus.


----------



## Marco13 (21. Feb 2007)

Wenn der Ball und das Objekt eckig sind, und man aus physikalische Plausibilität keinen Wert legt, funktioniert das oben genannte :wink: Und ob einem da "einfache Mathematik" so viel weiterhilft? Ich würde eher auf Physik tippen (für die man "einfache Mathematik" braucht), aber unabhängig davon: Das ganze vernünftig in Code zu gießen ist dann nochmal eine Aufgabe, deren Schwierigkeit mindestens mit der "theoretischen", "intuitiven" Beschreibung des Problems (und der Lösung) vergleichbar, aber vermutlich sogar noch höher ist.

Nur die "alte" und die "neue" Position des Balles auf Kollisionen zu testen führt übrigens spätestens dann zu einem Problem, wenn der Ball sich schnell bewegt. Dann kann er nämlich in einem Zeitschritt durch ein Objekt durchfliegen (und man kriegt es nicht mit). Dem entgegen wirken kann man mit kontinuierlicher Kollisionserkennung. Da könnte man lange drüber schreiben... wenn das dann aber begleitet wird von Fragen wie "warum wird mein BufferedImage nicht gezeichnet?" merkt man, dass jemand versucht, nicht nur zwei Schritte auf einmal zu machen, sondern sich direkt ans Ziel zu beamen. Naja. Dabei kollidiert er wenigstens nicht mit irgendwelchen Objekten.


----------



## Apo (21. Feb 2007)

ich möchte dir auch nicht alles abnehmen 
aber eine SEHR gute Physikengine in Java gibt es hier

Kann ich nur empfehlen. Da sind Beispiele zum handling mit dabei. Ich benutze es selber gerade. ^^


----------



## unknown_member (21. Feb 2007)

Danke für die Links! Ich lese sie mir jetzt durch. Mit dem anderen geschriebenen kann ich jetzt noch nichts anfangen...


----------



## unknown_member (22. Feb 2007)

@Apo: Aber wo ist da der Text? Ich hab dort nur Beispiele gefunden...


----------



## Evil-Devil (22. Feb 2007)

Welchen Text meinst du? DIe API Doc kann man sich auch selbst generieren -.-

Kev's Phys API ist schon fein ;D


----------



## unknown_member (22. Feb 2007)

Dort gabs nur Beispiele, die man ausprobieren konnte, etwas darüber lernen kann man dort eig nicht.

@Evil-Devil: Welche API meinst du? Wo ist die?


----------



## Apo (22. Feb 2007)

ganz einfach 
mithilfe vom Webstart kannst du es dir erstmal anschauen, was er da gemacht hat.
als zweites kannst du dir dann den sourcecode runterziehen und dir dort die Beispiele, die mit drin sind, anschauen. Und schwup die wupp learning by doing bzw erstmal learning by watching  
man versteht es aber wirklich sehr leicht.
und es ist richtig, falls du eine API brauchst ... nimm z.B. eclipse füg das projekt mit dem source ein und geh auf export->und dann halt auf javadoc
und siehe da du hast die API 
€dit: OMG ich sehe er hat die API sogar online gepackt. Kannst sie dir auch ganz einfach da schon anschauen.


alles ganz einfach


----------



## unknown_member (22. Feb 2007)

OK, das mach ich.


----------



## EgonOlsen (22. Feb 2007)

Eine Physikengine (und sei sie auch "nur" für 2D) zu nutzen, um ein relativ einfaches Problem wie das Abprallen eines Balles vom Bildschirmrand zu lösen, ist meiner Ansicht nach totaler Overkill. Etwa so, als wenn ich einen kompletten Applikationsserver aufsetze, um ein Gästebuch zu realisieren. Kann man sicher machen, aber naja...


----------



## AlArenal (22. Feb 2007)

Ist die Frage was schwieriger ist, unknown_member so einen höchst komplizierten Zusammhang wie "Einfallwinkel = Ausfallwinkel" beizubiegen, oder ihm einfach Sourcecode ins Gesicht zu drücken, bis er im Hirn ankommt. 

Das sind Problem, die haben andere in Basic am C-64 mit dem bischen Mathe, dass sie in Klasse 7 oder 8 hatten, erfolgreich gelöst. Ist nun wirklich keine Astrophysik und sollte von jemandem, der es immerhin geschafft überhaupt gewisse Grundlagen in Java zu rallen auch anders zu meistern sein, als für jede Kleinigkeit anderer Leute Zeit zu stehlen


----------



## Apo (22. Feb 2007)

Ihr habt schon recht.
Aber er wollte nicht nur gegen die Wand den Ball fliegen lassen. Dafür ist es ja total einfach und richtig ... das bekommt er alleine hin.
Aber um zu prüfen, ob ein Ball sich mit irgendeinem Vieleck schneidet ... Da müsste ich schon etwas überlegen (Viereck mit Viereck ist einfach und Ball mit Ball auch ...)
Und es gibt ja noch mehr geometrische Figuren. Dafür bietet Java auch alles mögliche schon also Ellipse2D mit Rectangle2D oder mit einem Polygon vergleichen ... Java bietet alles an ... Aber in der Physikengine nimmt einem auch die Reibung ab usw  also ich finde Sie toll.  Ob sie hier wirklich gebraucht wird ... das ist eine andere Frage.


----------



## Marco13 (22. Feb 2007)

Masse, Impulserhaltung, Drehmoment, kontinuierliche Kollsionserkennung, Poisson-Koeffizient, E-Modul ... Wenn der Fragesteller mit einem Link zufrieden ist, ists doch gut...?


----------



## AlArenal (22. Feb 2007)

Reibung.. wenn man nicht gerade die diversen Reibungsarten in Physik bespricht ist dort eh alles idealisiert. Und ob der Abpraller nun physikalisch korrekt ist (inkl. Berücksichtigung von Rollreibung, Elastizität, Luftreibung, bla, ...) interessiert doch zunächst nicht wirklich... 

Sinnvoll isses doch das Gnaze erstmal irgendwie ans Laufen zu bekommen. Wenn er daraus später eine realitätsnahe Sim machen will, kann er das dann immernoch. Aber in der Regel ist es nicht förderlich für die Motivation, wenn man direkt alles auf einmal einabeun und perfekt haben will und sich verzettelt und nicht fertig wird..


----------



## Marco13 (22. Feb 2007)

Natürlich braucht man das oben genannte nicht alles für ein Spiel (abgesehen von der Kollisionserkennung). Aber zumindest sollte man Kräfte und Impulse berücksichtigen (Gravitation und der Spieler, der sicher gegen den Ball springen können soll). NUR Einfallswinkel=Ausfallswinkel hilft einem da nicht viel weiter, man wird wohl kaum drumrumkommen den Ball zumindest über (Position, Geschwindigkeit, Masse) zu beschreiben.


----------



## AlArenal (22. Feb 2007)

Angewandte Schulphysik. Ist doch viel sinnvoller sows mal selbst zu machen. Ist wie gesagt keine Astrophysik


----------



## EgonOlsen (22. Feb 2007)

Marco13 hat gesagt.:
			
		

> Natürlich braucht man das oben genannte nicht alles für ein Spiel (abgesehen von der Kollisionserkennung). Aber zumindest sollte man Kräfte und Impulse berücksichtigen (Gravitation und der Spieler, der sicher gegen den Ball springen können soll). NUR Einfallswinkel=Ausfallswinkel hilft einem da nicht viel weiter, man wird wohl kaum drumrumkommen den Ball zumindest über (Position, Geschwindigkeit, Masse) zu beschreiben.


Für Pong? Ich meine, was sonst soll das wohl werden? Das erste Pong war eine hartverdrahtete Fernsehscheibe-Malschaltung ohne CPU...da war auch nix mit Masse usw... :wink:


----------



## Evil-Devil (23. Feb 2007)

Das unknown_member wirklich die Java Grundlagen drauf hat bezweifel ich irgendwie...sonst hätte er doch all die Infos auf der CokeAndCode Seite gefunden. Und Kev's Code ist eigentlich auch immer gut dokumentiert.


----------



## Marco13 (23. Feb 2007)

Es soll ein Volleyballspiel werden. Und selbst für Pong müssen ja auch irgendwann mal Winkel dazukommen, die NICHT dem Winkel entsprechen, mit dem der Ball am Anfang losgeflogen ist...


----------



## unknown_member (23. Feb 2007)

Wow, danke für die vielen Antworten

Das mit der Physik und dem ganzen kann bzw kenn ich noch nicht, in der schule sind wir noch net so weit... :wink: 


Vllt kann man das mit Parabeln lösen, hab davon aber leider auch keine Ahnung...


----------



## Evil-Devil (23. Feb 2007)

Marco13 hat gesagt.:
			
		

> Es soll ein Volleyballspiel werden. Und selbst für Pong müssen ja auch irgendwann mal Winkel dazukommen, die NICHT dem Winkel entsprechen, mit dem der Ball am Anfang losgeflogen ist...



Nicht zwangsläufig, wenn man nicht zuviel Wert auf Genauigkeit nimmt, kann man auch einfach die EIngangswerte entsprechend der Eingangsrichtung umkehren und der Ball bounced entsprechend weiter.


----------



## Guest (1. Mrz 2007)

> Nicht zwangsläufig, wenn man nicht zuviel Wert auf Genauigkeit nimmt, kann man auch einfach die EIngangswerte entsprechend der Eingangsrichtung umkehren und der Ball bounced entsprechend weiter.



Korrekt - so hab ich das bei meinem Pong Clon auch gemacht. Und das ist völlig ausreichend und mit ein paar Zeilen erledigt.


----------



## Kanitrino (9. Jul 2007)

Ich hab' mal was nettes zu diesem Thema gemacht :

http://www.kanitrino.de/PageDE/HuepfBall.html


----------

