Einzelnen Beitrag anzeigen

Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#14

Re: Gravitationssimulator

  Alt 15. Jul 2004, 09:13
Zitat von dizzy:
@maximov: Die Masse "pennt"
Und was meinst du mit "durchcyceln" ?
Du kennst doch das spiel 'Asteroids' (das mit den felsbrocken im welt raum, die man zerschiessen kann)? Wenn ein fels oben verschwindet, dann kommt er von unter wieder rein. Das könnte lustige effekte geben. Geil wär auch, wenn man auf grosse massen schiessen könnte und diese dann zerfallen.

Zitat:
@maximov(2): Die Sache mit den Buttons ist die: [Start] startet eine Schleife mit einem Application.ProcessMessages. Pause beendet diese Schleife nicht, sondern nimmt nur den Berechnungsblock raus, so dass nurnoch das ProcesssMessages geloopt wird. Erst der Stop-Button beendet die äusserste Schleife, und erst jetzt lässt sich das Programm schließen bzw. tut es das wenn vorher irgendwann das X gedrückt wurde. Diese etwas wenig elegante Methode habe ich gewählt, da ich irgendwie keine Lust auf Threads hatte
Threads würd ich auf nicht machen, da hast du nur sychronisations-kosten. Aber du kannst ganz leicht das application.OnIdle event nutzen:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
...
  Application.OnActivate := AppActivate;
  Application.OnDeactivate := AppDeactivate;
end;

procedure TForm1.GameFrame(Sender: TObject; var Done: Boolean);
begin
  MacheRechnungUndZeichne;
  Done := false;
end;

procedure TForm1.AppActivate(Sender: TObject);
begin
    application.OnIdle := GameFrame;
end;


procedure TForm1.AppDeactivate(Sender: TObject);
begin
  application.OnIdle := nil;
end;
Und wenn du zu anderen apps wechselst, dann wird der game loop ausser kraft gesetz.

Zitat:
\\edit: Ach ja! Ne DirectX-Version gibt es quasi schon. Halt an Stelle von Graphics32 nen DirectDraw-Image... Aber der Vorteil ist absolut minimal, da G32 schon sehr fix ist, und die reine Darstellung Kleinkram ist. Zumal DirectDraw nativ kein Zeichnen von antialiasten Linien (Richtungsvektoren) mitbringt, und es wird noch die Option "Motionblur" geben - nur wie in nem anderen Thread bereits geschrieben kann DD selbst DAS nicht von Hause aus. Dafür muss man auf Direct3D zurückgreifen, und das ist mir für so einen kleinen Effekt zu heftig.
Nicht wenn man 'ne fertige render engine hat ...leider hab ich momentan dafür keine zeit. Aber is so ja auch geil
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat