Einzelnen Beitrag anzeigen

Crocotronic

Registriert seit: 9. Mai 2013
258 Beiträge
 
#1

Mini-Flugzeugsimulator

  Alt 24. Mär 2015, 18:26
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

Geändert von Crocotronic (24. Mär 2015 um 20:18 Uhr)
  Mit Zitat antworten Zitat