Hi Recall!
Ich stell mal son bisschen Code hierher. Der Ball soll zunächst nur an geraden Objekten bzw. dem Schläger abprallen. Ich bin damit erstmal nur am experimentieren. Also zunächst die Ball-Klasse:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| type TBall=class public x,y,xv,yv,angle:single; model : tall3dsmesh; constructor create; procedure render; procedure init; destructor free; end; |
x/y sind die Ballkoordinaten, xv,yv die Geschwindigkeit für x -und y Richtung, angle hatte ich für den Winkel vorgesehen.
Im Form-Create-Event dann den Ball erstellen
Delphi-Quelltext
1: 2: 3:
| Ball:=TBall.Create; |
Nun die eigentliche Procedure:
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:
| procedure BallMove; var nxv,nyv : single;
begin Ball.x := Ball.x + Ball.xv; Ball.y := Ball.y + Ball.yv; if ball.y>7.5 then ball.yv:=ball.yv-(ball.yv*2); if ball.y<-13 then ball.yv:=ball.yv+(-ball.yv*2); if ball.x>16 then ball.xv:=ball.xv-(ball.xv*2); if ball.x<-16.3 then ball.xv:=ball.xv+(-ball.xv*2);
if ball.y=-11.5 then begin if ball.x>=schlaeger.posx then begin if ball.x<schlaeger.posx+schlaeger.length then begin end; end; end; form1.Label1.Caption:=floattostr(ball.x)+' '+floattostr(ball.y); end; |
Dazu einige Bemerkungen: Nach der obigen Procedure ist der Winkel immer gleich am Formrand (z.B. xv=yv=45 Grad).
Die Koordinaten beziehen sich auf Weltkoordinaten von OpenGl. Der Ball und Schläger und zukünftige Objekte werden auch mit OpenGl gerendert.
Wie kann ich nun den Austrittswinkel berechnen, z.B. wenn der Ball auf den Schläger trifft? Hab da einiges versucht, aber kein brauchbares Ergebnis... leider
Moderiert von
tommie-lie: Delphi-Tags hinzugefügt