AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Sinus...oder Pong die 2.

Sinus...oder Pong die 2.

Ein Thema von Nonsense · begonnen am 23. Nov 2002 · letzter Beitrag vom 28. Nov 2002
 
Benutzerbild von Mr_T
Mr_T

Registriert seit: 7. Jun 2002
Ort: Eilsum
136 Beiträge
 
Delphi 2005 Personal
 
#13
  Alt 25. Nov 2002, 17:04
Denn will ich meinen Code mal erklären:

Also...
in dieser Zeile
Code:
if (ball.xpos < -2.7) and (ball.xpos > -3.1) and (ball.ypos < spielerrot.pos + 0.9) and (ball.ypos > spielerrot.pos - 0.95)then
begin
Prüfe ich zuerst die Position des Balles. Dabei ist "ball" ein record, in welchem die Integers xpos und ypos stecken, welche die Position des Balles beinhalten. "spielerrot" ist ebenfalls ein Record.... dieser enthält alle Infos über die Position des Roten Spielers (position, punktestand, usw...) ... hier wird also insgesammt geprüft, ob eine Kollision stattfindet (zuerst werden die Ball - Positionen überprüft, ob es überhaupt zu einer Kollision kommen kann und dann teste ich, ob die Ball - Pos im Rahmen der Schlägerpositionen liegt). Sollte dies erledigt sein, geht es hiermit weiter:
Code:
 if ball.ypos > spielerrot.pos then
begin
Hier teste ich, ob der Ball näher "dran" ist, als die Mitte des Schlägers (ich habe den Clone mit Open Gl in 3d gemacht..... alle meine "y-Koordinaten beziehen sich im Programm auf die z-achse, was bedeutet, das ein Größerer z-wert "nächer an der Kamera drann" bedeutet)....
Dieser Test ist notwendig, damit ich
1) weiß, in welche richtung der Ball abprallen soll
2) keine Negativen werte in der Rechnung habe
...
sollte das erfüllt sein, geht es hiermit weiter:
Code:
ball.yspeed := (ball.ypos-spielerrot.pos)*(0.3);
ball.xspeed := sqrt((0.09 - (ball.yspeed*ball.yspeed)));
Dies ist das Kernstück der neuen Geschwindigkeitskalkulation ....
Zunächst errechne ich die Y - Geschwindigkeit... diese errechne ich dadurch, das ich die Distanz zwischen dem Ball und der schlägermitte erreche (kollidiren tun sie ja dennoch) und diese mit der maximalen Geschwindigkeit (0,3) multipliziere....
Im Übrigen ist die Subtraktion der Werte immer >1, da ein Wert, bei dem 1 rauskommen würde bedeuten würde, das der Ball vorbeigeflogen wäre ...
Dieses hat nun eine Konsequenz: je weiter an der Seite des Schlägers der Ball auftrift, umso größer ist auch der Abprallwinkel .... trift man ihn genau in der Mitte geht er genau senkrecht weg....

Nach der Berechnung der Y- Geschwindigkeit handle ich die X- Geschwindihgkeit ab. Da die Gesammtgeschwindigkeit ja genau 0,3 sein soll wende ich Pytagoras sein Dreieck an.... (A hoch 2 = B hoch 2 + C hoch 2);

Dabei ist in meinem Falle "A" die Gesamtrichtung, B ist meine X - Speed und C ist meine Y - Speed.... diese Formel habe ich dann nach "B" umgeformt und bin zum ergebiss gekommen, dass B = Wurzel aus (A hoch 2 + C hoch 2) ... (die Wurzelfunktion ist in Delphi "sqrt")
Damit war die Sache einfach: ich brauchte nur noch von 0,9 (meine Gesamtspeed zum Quadrat) nmeine Y -Speed multipliziert mit sich selber abziehen....

Der Restliche Code bezeiht sioch nur noch auf den anderen Fall (Ball weiter weg als Schläger) ....

Ich hoffe die lange erklärung nützt dir was....
Mein neuer, 13 Teiliger Open GL - Kurs (Samples in Delphi):
www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Neu! Teil 2b: Initialisierung von OpenGL unter Kylix ist fertig!
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz