Autor Beitrag
Filler
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 30.12.09 19:07 
Ich hoffe das Thema gehört hier rein, sonst bitte ich um Entschuldigung.

Ich soll in meinem Informatik-Unterricht ein Spiel mit Delphi erstellen. Allerdings kann ich so ziemlich gar nichts ;)
Deshalb bitte ich euch bei euren Antworten anfängerverständlich zu schreiben ;)
Nun zu meiner Frage:
Ich will ein Spiel so ähnlich wie "Filler" programmieren. Für die, die das Spiel nicht kennen: Um mein Problem zu lösen muss man nur wissen das sich Kugeln (Kreise) voneinander abstoßen. Genau da liegt mein Problem. Wie schaffe ich es das sich zwei Shapes in Form von Kreisen voneinander abprallen?
Ich habe den jeweiligen Kreisen eine Bewegung in x- und in y-Richtung festgelegt.
Weitere Fakten zur Hilfe der Beantwortungen meiner Frage gebe ich gerne.

Wie ihr an meinem Text sicher merkt steht es um meiner Fachsprache wirklich schlecht, aber ich hoffe das hält euch nicht ab mir fleißig zu antworten ;)
Ich wäre echt für jede Hilfe dankbar!
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 30.12.09 19:22 
Naja, du brauchst doch nur die Left und Top Positionen der beiden Shapes vergleichen, und wenn sich diese überschneiden, die Richtung von beiden umkehren.

Wenn dir das nicht weiterhilft, zeig mal den Code, wie du die Dinger bewegst.

_________________
PROGRAMMER: A device for converting coffee into software.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 30.12.09 19:26 
naaaaja, wenn man es genau machen will muss man den berührungspunkt der kugeln feststellen, ne tangente durch den punkt legen und dann mittels dem satz "einteffwinkel = ausgangswinkel" die kugeln umlenken. ;)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
helgew
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 30.12.09 19:29 
Hi,


Dein Problem ist garnicht soo groß, nur Mut :-)

Zunächst hast du zwei Kreise, die durch Radius, Ort und Geschwindigkeit (jeweils für x und y) parametrisiert sind. Du musst für jede Kombination aus Kreisen den Abstand d := sqrt(sqr(x_i-x_j) + sqr(y_i+y_j)) berechnen. Sollte mit dem nächsten Zeitschritt d < r_i + r_j sein ( i und j sind zwei zu testende Kreise), so musst du neue Geschwindigkeiten setzen.

Dazu musst du etwas Physik mit einbauen, indem du den Kreisen Massen (im einfachsten Fall eben 1) zuordnest. Für elastische Stöße ist die Schwerpunktsgeschwindigkeit erhalten und die Geschwindigkeitsvektoren lassen sich unter Impulserhaltung bestimmen.

Also vereinfacht: prüfe anhand der Abstände, ob eine Kollision im aktuellen Zeitschritt vorliegt und bestimme demnach die Geschwindigkeiten neu. Den Ort kannst du dann so setzen, dass die Kreise sich gerade berühren.
Filler Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 30.12.09 21:38 
Erstmal danke für Antorten ;)
Ich habe gerade mein Projekt geöffnet und etwas geändert wegen abprallen der Bälle (siehe unten) und wills mal probeweise abspielen da erscheint mir nur ein leeres formular...keine ahnung wo der seine probleme...naja halb so schlimm, denn an meien bisherige Programmierung komme ich ohne Probleme ran nur spielts er gerade nicht ab, weshalb ich auch nicht testen kann ob die untenstehende programmierung funktioniert...wäre auch die einfache version, die xentar meinte denke ich...das heißt es stoßen sich nur die quadrate um die kreise ab...die 33 als durchmesser um an die untere und rechte kante zu gelangen ;) a,b,c und d sind die bewegungen der beiden bälle jeweils in x- und y-richtung.
elundril: ja das sehe ich auch so nur ich ahbe keine ahnugn wie ich das bei delphi mache xD
helgew: ja ok...da muss ich erstmal durchblicken..das hört sich aber schonmal gut an, wenn du mir noch erklären könntest was genau s,q,r und t darstellen...r ist der radius denke ich mal ;)
ehm ja das mit der schwerkraft und elatische stöße und sowas wollte ich erstmal weglassen und entspricht denke ich mal auch nicht den erwartungen der lehrerin (ich hoffe es jedenfals ;))

so das ist meine neue programmierung für das abstoßen, konnte es aber wie gesgat nicht ausprobieren und betrifft leider auch nicht die kreisform.:(

if sdoof1.left=sdoof2.left+33 and sdoof1.top=sdoof2.top+33 then
begin
a:=-a;
b:=-b;
c:=-c;
d:=-d
end;

if sdoof1.left=sdoof2.left+33 and sdoof1.top+33=sdoof2.top then
begin
a:=-a;
b:=-b;
c:=-c;
d:=-d
end;

if sdoof2.left=sdoof1.left+33 and sdoof2.top=sdoof1.top+33 then
begin
a:=-a;
b:=-b;
c:=-c;
d:=-d
end;

if sdoof2.left=sdoof1.left+33 and sdoof2.top+33=sdoof1.top then
begin
a:=-a;
b:=-b;
c:=-c;
d:=-d
end;


ich hoffe es kann noch einer durchblicken ;)
klezmor
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 558


delphi 6 personal delphi 2005 personal
BeitragVerfasst: Mi 30.12.09 21:48 
Ich würde mir folgenden Sourcecode mal ansehen, er könnte dich weiterbringen: www.delphi-library.d...rechnen_47305,0.html

gruß klezmor.

_________________
"Beware of bugs in the above code; I have only proved it correct, not tried it." Donald Knuth