Autor Beitrag
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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:
ausblenden 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 <> 0then 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73

Win XP, Fedora Core RC 1

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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 :mrgreen:), 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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 :P

Au'revoir,
Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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:


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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??? :roll:

Au'revoir,
Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
lemming
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: 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
ausblenden 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 <> 0then 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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... :roll:

Au'revoir,
Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

WinXP Home
D6 Enterprise
BeitragVerfasst: 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.

user defined image

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

WinXP Home
D6 Enterprise
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

WinXP Home
D6 Enterprise
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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!