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
Seite 2 von 4     12 34      
Noobmaster

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

AW: Andorra 2d Billardspiel in 2d

  Alt 29. Jul 2010, 11:12
Okay, verstanden, das sind ja ganz einfache Ortskoordinaten, wie man sie aus Klasse 5 und 6 kennt. Und was genau heißt das jetzt auf mein Spiel angewendet? Kann mir einer ein Beispiel mit verschiedenen Winkeln, aber gleichem Laufweg der Weißen geben? Gebt mit bitte als Beispiel dann jeweils auch die Positionen von Weiß und Geisterball. Danke schonmal.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

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

AW: Andorra 2d Billardspiel in 2d

  Alt 29. Jul 2010, 11:42
Gut, also nehmen wir mal an, A bezeichnet die weiße Kugel und B die Geisterkugel. (Beides sind also Vektoren mit je einer X und einer Y Komponente)
Die weiße soll nun in Richtung der Geisterkugel laufen. Dann nehmen wir einfach C = B-A (das ist die Differenz der beiden Vektoren)
Und wenn du möchtest dass der Vektor eine Länge von 50 hat:
D = C/|C| * 50 = C/sqrt(Cx^2+Cy^2) * 50

|C| soll hier die Norm darstellen. Danach ist D ein Vektor, der genau 50 Einheiten lang ist und von der weißen Kugel in Richtung Geisterkugel zeigt.
  Mit Zitat antworten Zitat
Noobmaster

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

Vektor D

  Alt 29. Jul 2010, 13:34
Muss ich dann also nur noch schreiben, dass der Vektor A + den Vektor D gerechnet wird und dann bewegt sich die Weiße in die richtige Richtung(Das Ergebnis werde ich aufgrund der Wurzel wohl natürlich runden müssen).
Habe ich das so richtig verstanden?

Geändert von Noobmaster (29. Jul 2010 um 13:37 Uhr)
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#14

AW: Andorra 2d Billardspiel in 2d

  Alt 29. Jul 2010, 13:40
A + k*D, k ist die Entfernung zwischen A und dem Endpunkt der Bewegung.
  Mit Zitat antworten Zitat
Noobmaster

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

AW: Andorra 2d Billardspiel in 2d

  Alt 29. Jul 2010, 13:56
Ja, aber wenn ich doch jetzt Ax + Dx und Ay + Dy rechne,dann bewegt sich doch die Weiße entlang des Vektors D, oder?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

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

AW: Andorra 2d Billardspiel in 2d

  Alt 29. Jul 2010, 17:57
Ja, grundsätzlich schon.

Ich weis jetzt nicht genau wie Andorra2D Bewegungen darstellt (ich vermute mal mit einem Geschwindigkeitsvektor, oder du bekommst einfach nur einen Taktschritt mit einem deltaT parameter und musst das dann selber machen)

Um es nochmal zu präzisieren: Wenn du die weiße Kugel an die Position A+D setzt, dann ist sie von ihrer Ausgangsposition 50 (Pixel?) näher an der Geisterkugel dran. Es kann natürlich auch sein dass die Geisterkugel nur 20 Einheiten weg ist, dann ist die weiße jetzt hinter der Geisterkugel. Suie hat sich halt 50 Einheiten in diese Richtung bewegt.
  Mit Zitat antworten Zitat
Noobmaster

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

AW: Andorra 2d Billardspiel in 2d

  Alt 29. Jul 2010, 18: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
 
#18

AW: Andorra 2d Billardspiel in 2d

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

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

Neues Problem

  Alt 4. Aug 2010, 09: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
 
#20

AW: Neues Problem

  Alt 4. Aug 2010, 10: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
Antwort Antwort
Seite 2 von 4     12 34      


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 19:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz