AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Andorra 2d Billardspiel in 2d
Thema durchsuchen
Ansicht
Themen-Optionen

Andorra 2d Billardspiel in 2d

Ein Thema von Noobmaster · begonnen am 27. Jul 2010 · letzter Beitrag vom 8. Jul 2011
Antwort Antwort
Noobmaster

Registriert seit: 18. Jul 2010
114 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Andorra 2d Billardspiel in 2d

  Alt 29. Jul 2010, 17:00
Danke, ich glaube, ich krieg das jetzt auf die Reihe. Ich werde es demnächst mal ausprobieren und sollte ich Probleme kriegen, dann melde ich mich wieder.
  Mit Zitat antworten Zitat
Noobmaster

Registriert seit: 18. Jul 2010
114 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Andorra 2d Billardspiel in 2d

  Alt 1. Aug 2010, 09:41
Es hat wunderbar funktioniert, danke!
  Mit Zitat antworten Zitat
Noobmaster

Registriert seit: 18. Jul 2010
114 Beiträge
 
FreePascal / Lazarus
 
#3

Neues Problem

  Alt 4. Aug 2010, 08:17
Delphi-Quellcode:
                  if Energie > 0 then begin
                     X := X + (XSpeed * TimeGap * Energie * 10);
                     Y := Y + (YSpeed * TimeGap * Energie * 10);
                     //Energie neu berechnen, ACHTUNG bei der Wurzel (wurzel aus -X)
                       if XSpeed * YSpeed <> 0 then Energie := Energie - sqrt(abs(((Xspeed*TimeGap)*(XSpeed*TimeGap)))+abs(((YSpeed*TimeGap)+(YSpeed*TimeGap))))
                       else if (XSpeed=0) and (YSpeed <> 0)then Energie := Energie - abs(YSpeed*TimeGap)
                       else if (YSpeed=0) and (XSpeed <> 0)then Energie := Energie - abs(XSpeed*TimeGap);
Energie ist die Laugenergie der Kugel, die anschließend verringert wird. Die Kugel soll ja nicht ruckartig 100Pixel nach rechts springen, sondern es soll ja eine flüssige Bewegung generiert werden. XSpeed und YSpeed rechne ich über die Vektorenrechnung aus. Irgendwie muss ich aber einen Fehler in dem geposteten Text haben. Ist XSPeed*YSpeed<>0, dann ist der Laufweg soweit ich das beurteilen kann, immer derselbe (oder täusche ich mich?). Ist jedoch YSpeed oder XSpeed = 0, dann läuft die Kugel sehr sehr weit, woraus ich schließe, dass ich entweder im ersten Fall zu viel Energie abziehe oder im zweiten Fall zu wenig. FÜr mich sind beide Rechnungen jedoch schlüssig, schließlich wird im ersten Teil eine Diagonale durchschritten, die ich mit Pythagoras ausrechne und im zweiten Fall kann ich ja den direkten Weg abziehen.
Oder liege ich falsch?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

AW: Neues Problem

  Alt 4. Aug 2010, 09:51
FÜr mich sind beide Rechnungen jedoch schlüssig,
Für mich nicht. Was du im Grunde machst (bzw. versuchst) ist:
E := E - Norm(Speed) * TimeGap
Norm(Speed) ist die Norm des Geschwindigkeitsvektors.

Was du wirklich tust: ich habe die lange Formel mal etwas auseinander gefriemelt:
Code:
sqrt(
   abs(
      (
         (Xspeed*TimeGap)
         *
         (XSpeed*TimeGap)
      )
   )
   +
   abs(
      (
         (YSpeed*TimeGap)
         +
         (YSpeed*TimeGap)
      )
   )
)
Fällt dir was auf? Beim YSpeed*TimeGap steht ein Plus. Das gehört da nicht hin. (Zumindest wären deine Formeln konsistenter wenn dort ein * stehen würde)

Den Betrag kannst du übrigens weglassen. Die Fallunterscheidung auch. Sieht dann so aus:
Delphi-Quellcode:
  if Energie > 0 then begin
                     X := X + (XSpeed * TimeGap * Energie * 10);
                     Y := Y + (YSpeed * TimeGap * Energie * 10);
                     //Energie neu berechnen
                        Energie := Energie - sqrt(Xspeed*XSpeed + YSpeed*YSpeed) * TimeGap;
  Mit Zitat antworten Zitat
Noobmaster

Registriert seit: 18. Jul 2010
114 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Andorra 2d Billardspiel in 2d

  Alt 4. Aug 2010, 12:52
Danke, manchmal sieht man vor lauter Bäumen den Wald nicht mehr
  Mit Zitat antworten Zitat
Noobmaster

Registriert seit: 18. Jul 2010
114 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Andorra 2d Billardspiel in 2d

  Alt 5. Aug 2010, 16:36
Hi, habe ein neues Problem, aber weil es immer noch mit dem Billardspiel zu tun hat, schreibe ich meine Frage hier hin.
Ich bin bei den Kugelkollisionen angekommen. Das Problem für mich ist jetzt sehr schwer zu beschreiben. Wann eine Kugel von einer anderen getroffen wird brauche ich selber nicht zu bestimmten, das erledigt Andorra2d für mich. Nun ist es aber das Problem, dass die Kugel in Wirklichkeit keine flüssige Bewegung macht, sondern "Sprünge":
Delphi-Quellcode:
                     X := X + (XSpeed * TimeGap * Energie * 10);
                     Y := Y + (YSpeed * TimeGap * Energie * 10);
                     //Energie neu berechnen
                     Energie := Energie - sqrt(Xspeed*XSpeed + YSpeed*YSpeed) * TimeGap;
Maximalwert der Energie ist übrigens 25.
Das heißt, dass eine Kollision erst erkannt wird, wenn die eine Kugel eventuell schon tief in der anderen steckt, aber dann kann ich die neuen Richtungen nicht mehr ausrechnen (Im Normalfall prallt die Weiße im 90° Winkel ab, also läuft entlang der Senkrechten zu der Gerade durch die beiden Kugelmittelpunkten)
Ich hoffe ihr könnt mir helfen. Bisher habe ich im Internet nichts gefunden, was mir das Problem verständlich näher bringen konnte.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Andorra 2d Billardspiel in 2d

  Alt 5. Aug 2010, 18:23
Deshalb solltest du dich in solchen Fällen nicht auf die Kollisionsprüfung von Andorra 2D verlassen, sondern über Vektorgleichungen die möglichen Kollisionspunkte im voraus bestimmen...
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz