| Autor |
Beitrag |
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 05.07.03 16:15
Hallo,
wie kann ich die richtung am besten herrausfinden ?
habe folgenden code versucht:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime, newTime: Double); begin Speed:=Speed+1; if Speed >= 5000 then begin Speed:=0; Label1.Caption:=IntToStr(Richtung);
if (Richtung = Oben) or (Richtung = unten) then Ball.Position.y:=Ball.Position.y+Richtungen[Richtung].Y;
if (Richtung = Links) or (Richtung = rechts) then Ball.Position.x:=Ball.Position.x+Richtungen[Richtung].x; end;
CollisionManager1.CheckCollisions; end;
procedure TForm1.FormCreate(Sender: TObject); begin GLSceneViewer1.Cursor:=crNone; ResetGame; Richtungen[Oben].X:=0; Richtungen[Oben].Y:=+1;
Richtungen[Unten].X:=0; Richtungen[Unten].Y:=-1;
Richtungen[Links].X:=-1; Richtungen[Links].Y:=0;
Richtungen[Rechts].X:=+1; Richtungen[Rechts].Y:=0;
end;
procedure TForm1.CollisionManager1Collision(Sender: TObject; object1, object2: TGLBaseSceneObject); begin if (object1.Position.Y >= object2.Position.Y) and (object2.Name <> 'Pad') then Richtung:=Unten; if object2.Position.Y >= object1.Position.Y then Richtung:=Oben;
if Richtung = Unten then ShowMessage(FloatToStr(object1.Position.Y) + '\' + FloatToStr(object2.Position.Y));
end; |
ich will ein BreakOut clone schreiben. deshalb das mit den rechtungen:)
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
worm
      
Beiträge: 135
D6 Prof
|
Verfasst: So 06.07.03 00:22
Komischer Breakout-Clone, wenn der Ball nur entweder genau nach oben, genau nach unten, genau nach rechts oder genau nach links fliegen kann. Wieso benutzt Du keine Vektoren? Und framerateabhängig ist die Bewegung bei Dir übrigens auch noch.
_________________ In the beginning, the universe was created. This has made a lot of people very angry, and is generally considered to have been a bad move.
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 06.07.03 00:23
könntes du mir einige Tipps geben wie ich es anderes machen könnte ?
kenne mich leider mit glScene noch nciht so gut aus.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
worm
      
Beiträge: 135
D6 Prof
|
Verfasst: So 06.07.03 01:02
Lies dir doch mal tommie-lie's GLScene-Tutorial durch, besonders den Teil über TGLBInertia. Du könntest die Bewegung darüber realisieren (framerateunabhängig) und bei jeder Kollision mit der Funktion SurfaceBounce den Ball abprallen lassen (Du musst dazu nur ermitteln, ob eine der seitlichen Begrenzungen getroffen wurde, oder oben bzw. unten; entsprechend musst Du den Normalenvektor bei der Funktion einsetzen). Schwierig wird es erst, wenn du feststellen willst, ob einer der Blöcke (oben) nicht von unten, sondern von der Seite getroffen wurde.
Den CollisionManager solltest Du übrigens nur für die Kollision mit den Blöcken verwenden. Ob die Begrenzungen getroffen wurden, kannst Du ja anhand der Position des Balles feststellen ("if Ball.Position.X >= 4" oder sowas), da Du genau weißt, wo die Grenzen liegen. Das wäre nur unnötige Arbeit für den CollisionManager. Und ob das Pad getroffen wurde, lässt sich auch leicht so ermitteln ("if (Ball.Position.Y <= Pad.Position.Y+Ball.Radius) and (Abs(Ball.Position.X - Pad.Position.X) <= Padbreite) then PadGetroffen).
Arbeit fällt wie gesagt nur bei der Kollision mit den Blöcken an, da musst Du die Positionen vergleichen, um herauszufinden, von welcher Richtung der Ball auf den Block getroffen ist, und dann wieder den entsprechenden Normalenvektor an SurfaceBounce übergeben.
_________________ In the beginning, the universe was created. This has made a lot of people very angry, and is generally considered to have been a bad move.
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 06.07.03 11:45
| Zitat: |
Arbeit fällt wie gesagt nur bei der Kollision mit den Blöcken an, da musst Du die Positionen vergleichen, um herauszufinden, von welcher Richtung der Ball auf den Block getroffen ist, und dann wieder den entsprechenden Normalenvektor an SurfaceBounce übergeben.
|
ja genau das problem habe ich. habe mri das tutor schon durchgelesen.
könnte du mir nicht ein kleiens beispiel geben ?
ich verwende den colisions manger auch für die ecken. das klapt auch gans gut:)
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mo 07.07.03 09:38
ich bin jetzt soweit das der ball abplrallt und auch fliegt.
wie kann ich jetzt das so machen das er ein zufals winkel erechnet wenn er aufschlegt ?
könnte mir das einer sagen ?
die x postion wird so verändert bei mir:
Delphi-Quelltext 1:
| Ball.Position.X:=Ball.Position.X+Speed+DelaTime+W |
wobei das w für den winkel stehen soll. aber irngewie klappt das nicht..
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
worm
      
Beiträge: 135
D6 Prof
|
Verfasst: Mo 07.07.03 23:27
| mimi hat folgendes geschrieben: | | aber irngewie klappt das nicht.. |
Kein Wunder. Was soll das bringen, wenn Du einen Wert zur X-Koordinate addierst? Wenn Du die Richtung ändern willst, solltest Du einen Vektor benutzen und den mit den Prozeduren aus der Geometry.pas drehen. Die getrennten x- und y-Koordinaten sind sowieso wenig sinnvoll. Und bei deiner Umsetzung auch noch verkehrt.
_________________ In the beginning, the universe was created. This has made a lot of people very angry, and is generally considered to have been a bad move.
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Di 08.07.03 09:19
das hat auch schon tommie-lie gesagt nur leider kenne ich mich damit noch nicht aus, das demo(Pong) verstehe ich noch nicht so ganz 
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Di 08.07.03 19:54
Man könnte mit den Sinusfunktionen etwas anfangen, aber da rechnet man sich umm und dämlich, wenn man das so macht.
Wie's mit Vektoren geht, habe ich dir gezeigt, wenn du dir den Vektor als Pfeil vorstellst, der in eine bestimmte Richtung zeigt, ist es doch gar nicht so schwer sich das vorzustellen 
_________________ 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: Di 08.07.03 21:01
für mich schon. könntet einer von euch nicht ein einfaches beispiel schreiben wie ICH sowas am besten anstellen könnte ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 13.07.03 12:19
das problem ist leider noch nicht gelöst, habe es ebend noch versucht zu lösen aber es hat leider nicht funktioniert....
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|