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

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 05.07.03 16:15 
Hallo,
wie kann ich die richtung am besten herrausfinden ?
habe folgenden code versucht:
ausblenden volle Höhe Delphi-Quelltext
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;

// hier funktioniert leider die richtung bestimmung nicht.
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));

//  if Objekt1.
end;


ich will ein BreakOut clone schreiben. deshalb das mit den rechtungen:)

_________________
MFG
Michael Springwald, "kann kein englisch...."
worm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 135


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

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


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

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

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


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

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

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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 :roll:

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

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