Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi OpenGL Ballkollision bei Pong (https://www.delphipraxis.net/167367-opengl-ballkollision-bei-pong.html)

acidrain 26. Mär 2012 16:22

OpenGL Ballkollision bei Pong
 
Guten Tag liebe Community,
ich bräuchte eure Hilfe bei meinem Ballkollisionsproblem.
Ich hab viele Theorien aufgestellt, wie ich den Verlauf des Balles in x/y-Richtung (abhängig vom Gegenstand, auf den der Ball aufprallt) umkehren kann.
bx und by sind bei diesem Beispiel auch die jeweiligen Koordinaten des Balles, an denen er sich zum genauen Zeitpunkt befindet.
Ich denke auch, dass es bei mir eher ein mathematisches Problem ist, als ein Problem mit Delphi/OpenGL.

Code:
procedure TForm1.Ball;
var k1,k2,bx,by: extended;
begin

if (by<=20) and (by>=-12) and (bx>=-30.5) and (bx<=30.5) then
 begin
  by:=by+0.005;
  k1:=bx-0.005;
  k2:=by-0.005;
  bx:=bx+0.005;
 end
else if by>=20 then
 begin
   by:=k2;
   end;

if by>=20 then by:=k2;



  glPushMatrix();
  glTranslatef(0, 0, -50);
  glTranslated(bx, by, 0);
  glBegin(GL_QUADS);
    glColor3f(0, 1, 0); glVertex3f(-1,1,-1);  
    glColor3f(0, 1, 0); glVertex3f(-1,-1,-1);
    glColor3f(0, 1, 0); glVertex3f(1,-1,-1);
    glColor3f(0, 1, 0); glVertex3f(1,1,-1);
  glEnd;
  glPopMatrix();
end;
Ich hoffe, dass mein Code für euch verständlich ist.
Kleine Anmerkung: wenn by<=20 ist, dann trifft der Ball die obere Bande, die untere trifft er bei by>=-12.
bx<=30.5 ist das Auftreffen beim rechten Schläger und bx>=-30.5 das Auftreffen beim Linken.

EDIT: Da bx und by unbekannt sind, muss ich auf die jeweils kommen um immer 0.005 davon subtrahieren zu können und somit die Richtung umkehren kann. Da kommt wohl Mathematik infrage, die ich nicht sehr gut beherrsche.


Vielen Dank für eure Hilfe.

MfG,
acidrain

FlatIron 26. Mär 2012 16:41

AW: OpenGL Ballkollision bei Pong
 
Hast du dir auf DelphiGL die Anleitungen zur Kollision durchgelesen?
Empfehle ich dir dringend.

Das was du da machst ergibt für mich keinen Sinn? Du musst die Bewegungsrichtung des Balls entlang der Koordinatenachsen nachhaltig verändern. Hier bietet es sich an die Eigenschaften des Balls in einer Klasse zu kapseln. Sprich Orts- und Bewegungsvektor. Wenn du feststellst, dass der Ball "auftrifft", dann musst du deinen Bewegungsvektor dementsprechend manipulieren.

Tutorial zur Analytischen Geometrie findest du auch auf der Seite von DelphiGL oder auf Oberprima. http://oberprima.com/mathematik/

Viel Spaß ;)

p80286 26. Mär 2012 16:55

AW: OpenGL Ballkollision bei Pong
 
Zitat:

Zitat von acidrain (Beitrag 1158690)
Kleine Anmerkung: wenn by<=20 ist, dann trifft der Ball die obere Bande, die untere trifft er bei by>=-12.

nehmen wir einmal an by sei -11 dann trifft der Ball die obere Bande und gleichzeitig die untere
da stimmt irgendetwas nicht!


Gruß
K-H

acidrain 26. Mär 2012 17:02

AW: OpenGL Ballkollision bei Pong
 
Tut mir Leid, ich hab mich verschrieben, wenn by=20 bzw. -12 ist, dann trifft er die Banden.
Zudem hab ich mich auch bei den größer/kleiner Zeichen vertan, natürlich müssen, diese bei beiden umgetauscht werden!
In der Prozedur hab ich's ja richtig angegeben, in welchem Bereich der Ball sich bewegen kann.

EDIT: Außerdem sind das rohe Gedankengänge die ich derzeit in der Prozedur hab und hoffe auf eine kleine Hilfeleistung.
Die Tutorials haben mich nicht unbedingt weitergebracht


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 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