Hallo zusammen,
nur aus reinem Interesse oder vielleicht auch im Hinblick auf die Entwicklung eines kleinen Spiels möchte ich ein "Flugzeugsimulator" bauen.
Das hört sich jetzt nach einem ganzschönen Brocken an, er soll aber wirklich nur aufs Mindeste reduziert werden, dh.
- ein einfacher Button soll als Flugobjekt dienen
- mit Key-Up und Key-Down soll die Beschleunigung geändert werden
- die Masse des Fliegers soll berücksichtigt werden, also auch die Trägheit beim Beschleunigen
- wenn der Flieger sich in einem zu steilen Winkel befindet, soll eine Art Strömungsabriss stattfinden, der durch senken der Nase wieder behoben werden kann
Jetzt ist da eine Menge Physik drin, was mir hierbei etwas Schwierigkeiten bereitet. Mein Ansatz:
Delphi-Quellcode:
var Ticker, Winkel, Beschl: Double;
{$R *.fmx}
procedure TForm1.FormCreate(Sender: TObject);
begin
Ticker:= 0;
Winkel:= 0;
Beschl:= 0;
end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
Shift: TShiftState);
begin
if Key = 37 then
Winkel:= Winkel + 0.1;
if Key = 39 then
Winkel:= Winkel - 0.1;
if Key = 38 then
Beschl:= Beschl + 1;
if Key = 40 then
Beschl:= Beschl - 1;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
v,h,a,t,s,g,w: Double;
begin
Inc(Ticker); // 1 ms Takt
if Ticker > 50 then
Ticker:= 50; // Geschwindigkeit limitieren
a:= Beschl; // Beschleunigung
t:= Ticker/100; // Takt auf gewünschte Zeit bringen
w:= Winkel; // Winkel e
g:= 9.81; // Gewichtskraft
s:= 0.5*a*Power(t,2); // 1/2 * a * t^2
//v:= t/a;
//h:= (v*t*w)-((g*power(t,2)/2));
h:= (w * 0.5 * g * Power(t,2)) / 2; // sin(a) * 1/2 * g * t^2
Button1.Position.X:= Button1.Position.X+s;
Button1.Position.Y:= Button1.Position.Y-h;
end;
Wie ihr seht, ist das alles sehr primitiv und sicherlich nicht ganz korrekt. Es gibt hier wahrscheinlich eine Menge von Physikern unter euch, die auf den ersten Blick etliche Fehler sehen. Meint ihr, ihr könnt mir erklären (vllt. auch anhand von Code), wie die oben genannten Punkte hier noch eingefriemelt werden können?
Wenn die Theorie stimmt, werde ich aus dem ganzen Kram natürlich eine objektorientierte Lösung erstellen. Es geht mir lediglich darum, dass ich die physikalischen Gesetze hier richtig in Verbindung bringe.
Würde mich sehr freuen, wenn ihr mir ein paar Ratschläge geben könntet.
Viele Grüße
Croco