| Autor |
Beitrag |
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Di 05.08.03 13:14
Hallo,
ich möchte ein breakOut clone schreiben, habe aber leider probleme mit den richtungen wenn eine collisions ausgelöst wird.
Habe es so versucht, doch das klappt leider nicht so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| if (YDir = Oben) and (XDir = Rechts) then begin XDIR:=Links; YDir:=Unten; test:=0; end;
if (YDir = Oben) and (XDir = Links) then begin XDIR:=Rechts; YDir:=Unten; test:=1; end;
if (YDir = Unten) and (XDir = Rechts) and (test <> 1)then begin XDIR:=links; YDir:=Oben; test:=2; end;
if (YDir = Unten) and (XDir = Links) and (test <> 0) then begin XDIR:=rechts; YDir:=Oben; end; |
kann mir jemmand sagen wie ich es richtig machen kann bzw. könnte ?
ich möchte gerne bei dem collisions manger bleiben.
der ball fliegt jetzt so
erst nach unten wenn er auf dem pad lande geht er nach lins oben prallt ab fliegt zurück zum pad prallt ab filegt nach rechts oben prallt ab und wieder zurück zum pad und nach links oben und soweiter.
ich möchte gerne das es so aussieht wie es bei breakOut halt aussieht.....
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Mr_T
      
Beiträge: 73
Win XP, Fedora Core RC 1
|
Verfasst: Di 05.08.03 23:12
Ich denke dein simples Problem besteht eher darin, dass
1) Es nur links, rechts / oben, unten als Rcihtung giebt, also 4 Kombinationen... dadurch fliegt das ding natürlich recht gleichförmig (man könnte mit single oder double-werten für die Speed rechnen)
2) Bei einer Kollision werden beide Richtungen umgekert... Physikalisch gesehen ist das baer nicht ganz richtig... angenommen dein "Ball" fliegt schräg gen Rechts-Oben und trifft dann von Unten einen Stein... dann müsste dein Ball nicht nach Links-Unten wieder abhauen, sondern nach Rechts-Unten weiterfliegen.... leider kenne ich Glscene nicht, so dass ich auch dir nicht wirklich sagen kann, ob die "Richtung", aus der die Kollision kam, feststellbar ist......
_________________ Es gibt 10 Arten Binäre Zahlen zu interpretieren: 0 und 1
Wer nicht kämpft, hat schon verloren!
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Di 05.08.03 23:22
Hi,
die richtung aus der die kollision kam, kann man sich doch einfach selber ausrechnen..
Einfach bei jedemmal wo sich der Ball bewegt die zuvorige und die aktuelle position speichern. Aus diesen beiden Punkten machen wir nun eine Linie und bestimmen anhand dieser Linie den Flugwinkel des balles.. tada
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Mi 06.08.03 11:55
| Aya hat folgendes geschrieben: | Einfach bei jedemmal wo sich der Ball bewegt die zuvorige und die aktuelle position speichern. Aus diesen beiden Punkten machen wir nun eine Linie und bestimmen anhand dieser Linie den Flugwinkel des balles.. tada  |
Super
Diese Linie kann man als Vektor betrachten und wenn man Richtungen nicht als "oben" und "unten" angibt, sondern als Vektor (immerhin laufe ich auch nicht wie auf einem Schachbrett  ), hat man schon den Richtungsvektor, und brauch den letzten Punkt und den jetzigen Punkt nicht besorgen.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mi 06.08.03 12:01
@aya
ich möchte gerne beim collisions Manager bleiben.
@Mr_T
ich möchte das der ball so abbrallt das es richtig ist.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Mi 06.08.03 16:00
| mimi hat folgendes geschrieben: | @aya
ich möchte gerne beim collisions Manager bleiben. |
Ich hab KA von GLScene, aber ich würde sagen der CollisionsManager ist dafür da, das du rausbekommst OB eine Collision da ist... deine flugrichtung wirst du wohl selber berechnen müßen.
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 07.08.03 14:55
das ist richtig, doch leider wird das ereignis erst dann ausgelöst wenn eine collision standgefunden hat, ich kann jetzt nicht sagen ob in x+5 eine collisions warscheinlich ist oder nicht.
ich brauche also sowas wie:
if collision(4,0,0) = True then ....
mehr eigentlich nicht *g*
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Do 07.08.03 14:59
Hi,
wieso interressiert es dich auch ob in x+5 ne Kollision ist?? Ist doch total unwichtig..
Du speichert bei JEDER Bewegung des Balles die aktuelle + die letzte Position.. sollte nun unerwartet eine Kollision stattfinden, berechnest du aus der aktuellen und letzten Position die letzte Flugrichtung des Balles, drehst diesen um (Einfallswinkel = Ausfallswinkel) und fertig is
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 07.08.03 15:05
| Zitat: |
wieso interressiert es dich auch ob in x+5 ne Kollision ist?? Ist doch total unwichtig
|
für mich nicht, grund:
so kann ich xDir und Ydir rechtzeitig und auf die richtigen werte setzen.
so könnte ich z.b. folgendes machen:
Delphi-Quelltext 1: 2: 3: 4: 5:
| if Collision(x+1,0,0) = True then XDIR:=Unten; if Collision(x-1,0,0) = True then XDIR:=Oben;
if Collision(0,+1,0) = True then YDIR:=Links; if Collision(0,-1,0) = True then YDIR:=Rechts; |
so das ist der eingetnlich grund *g*
oder könnte mir jemmand ein beispiel schreiben mit vectoren oder wie diese dinger auch immer heißen mögen:)
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Do 07.08.03 15:08
Hi,
also wenn ich mich nicht täusche ist Breakout doch dieses Spiel wo man mit ner Kugel oben am rand steine kaputt machen muß, oder???
Meinst du nicht es ist da ein wenig unpraktisch wenn der Ball nur in 4 richtungen fliegen kann???
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
lemming
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Do 07.08.03 16:30
²mimi,
du hast gleich zwei Probleme in deinem Code.
1. Du beachtest bei der Abfrage und beim setzen der Richtungen nicht die Groß/Klein Schreibung.
| Zitat: |
if (YDir = Unten) and (XDir = Rechts) and (test <> 1)then begin
XDIR:=links;
YDir:=Oben;
.
.
. |
Somit treten manche Abfragen gar nicht erst ein.
2. Du solltest lieber so deine if anweisungen gestalten
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| if (YDir = Oben) and (XDir = Rechts) then begin XDIR:=Links; YDir:=Unten; test:=0; end else if (YDir = Oben) and (XDir = Links) then begin XDIR:=Rechts; YDir:=Unten; test:=1; end else if (YDir = Unten) and (XDir = Rechts) and (test <> 1)then begin XDIR:=links; YDir:=Oben; test:=2; end else if (YDir = Unten) and (XDir = Links) and (test <> 0) then begin XDIR:=rechts; YDir:=Oben; end; |
Sonst wird z.B. im obersten IF-Block die X, Y Werte geändert. Werden aber sobald sie den untersten IF-Block erreicht haben schon wieder geändert.
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Do 07.08.03 16:32
Hi,
im if-then-elseif-then stimme ich lemming zu, da hat er recht
Allerdings ist in Delphi die groß/kleinschreibung an und für sich völlig egal...  Aber stimmt schon, vom Styl her wär es schöner wenn man Variablen namen einheitlich schreibt, und nicht mal so und so *g*
Aber trotzdem... du bist mit deiner Lösung eigentlich total auf dem holzweg denke ich.. ausser ich hab nicht so recht verstanden was du willst...
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 07.08.03 17:04
@lemming
1. oben und unten und links und rechts sind constanten(sonst währen sie in '' eingeschlißen *g*)
2. auf die idee mit den ändern bin ich auch schon gekommen, werde mal aber deinen code testen:)
edit:
lol, lemming so weit war ich auch schon
der ball fliegt jetzt so:
wenn er auf das penel auf prallt wird er erst nach lings oben geschieckt dann wieder nach rechts unten prallt er aufs panel fliegt er weiter nach rechts oben prallt er dann wieder ab, wird das gleiche gemacht wie ebend....
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
thebe
      
Beiträge: 128
WinXP Home
D6 Enterprise
|
Verfasst: Fr 08.08.03 03:44
Tjaa, tut mir leid, nu kommt 3D Mathematik, aber anders kann mans nit lösen.
1. Du musst die Bewegung des Balls als Vektor speichern. Richtung = Flugrichtung, Betrag = Geschwindigkeit.
2. Du brauchst vom Stein/der Fläche wo der Ball auftritt ne Ebenengleichung. (Hessische) Normalform wär am besten.
3. Du hast den Flugvektor deines Balls. Stell Dir den Vektor vor, wie er seinen Endpunkt auf dem Punkt der Fläche hat, wo die Kollision ist. (schwarzer Pfeil) Der Kollisionspunkt ist der ANFANGSPUNKT der neuen Flugrichtung.
4. Berechne den Abstand der Ebene zum ANFANGSPUNKT des Flugvektors. (rote Linie)
5. Nimm die Normale der Ebene mit der Länge des eben ausgerechnetem Abstands (graue Linie). Anfangspunkt der Normalen ist dabei der Kollisionspunkt.
6. Berechne den Vektor von dem ANFANGSPUNKT des Flugvektors zum ENDPUNKT der Normalen. Geh vom ANFANGSPUNKT des Flugvektors das DOPPELTE des ausgerechneten Vektors und du erhält den ENDPUNKT des NEUEN Flugvektors. Mit Endpunkt und Anfangspunkt kannst Du nun den neuen Flugvektor berechnen.
- Thebe
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Fr 08.08.03 12:11
uff. geht das nicht einfacher ?
und wenn nicht, wie sieht das im code aus ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
thebe
      
Beiträge: 128
WinXP Home
D6 Enterprise
|
Verfasst: Sa 09.08.03 18:29
Hast die 12. / 13. Klasse scho durch ? Wenn ja, dann solltest Du wissen wie das im Code ausschaut. Wenn nicht, dann würd ich mir nen Schulbuch der Klassenstufe ausleihen, nen Semesterthema möcht ich nu hier ungerne im Forum erklären..
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 10.08.03 12:23
@thebe
lol, bin fertig mit der Schule fange am 18.8.2003 meine bäckerausbildung an:)
war nur 10 jahre zu schule gegangen.... und dahere habe ich diese bücher auch nicht... kennst du internet seiten die sich damit befassen ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
thebe
      
Beiträge: 128
WinXP Home
D6 Enterprise
|
Verfasst: Mo 11.08.03 14:01
Also Schulbuch wäre z.B. sehr empfehlenswert:
www.amazon.de/exec/o.../028-5534423-6021314
Das habsch auch benutzt.
Dann als Inet Seite kann ich leider nur
www.resourcecode.de/view.php?id=760
geben. Wenn Du das durch hast, kannst ja dann ma den Author des Tuts anschnacken ob er noch mehr an Tutorials im Inet hat.
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 14.08.03 17:41
ich werde mir mal dieses tutor aus dem internet anschauen....
kennt wer noch gute seiten ???
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Fr 15.08.03 04:35
Hi,
wofür das ganze eigentlich???
Ich hab mir gradmal das Breakout von deiner Homepage angeschaut, da klappt das ganze doch schon wunderbar... ???
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|