AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mini-Flugzeugsimulator

Ein Thema von Crocotronic · begonnen am 24. Mär 2015 · letzter Beitrag vom 25. Mär 2015
 
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
 


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 22:26 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