Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DelphiX - Bewegen ohne zu schlafen^^ (https://www.delphipraxis.net/53082-delphix-bewegen-ohne-zu-schlafen%5E%5E.html)

Neutral General 9. Sep 2005 17:40


DelphiX - Bewegen ohne zu schlafen^^
 
Also ich habe ein Procedure geschrieben mit der mein Spieler an einen Ort geht den man mit 2 Koordinaten bestimmt :

Delphi-Quellcode:
procedure TSpieler.MoveTo(x1,y1 : Single);
begin
 while (X <> x1) or (y <> y1) do begin
  if Y < Y1 then Spieler.Y := Spieler.Y + 0.5;
  if Y > Y1 then Spieler.Y := Spieler.Y - 0.5;
  if X < x1 then Spieler.X := Spieler.X + 0.5;
  if X > x1 then Spieler.X := Spieler.X - 0.5;
  Form1.DXDraw1.Flip;
  Form1.DXSpriteEngine1.Draw;
 end;
end;
Das Problem ist das in der Zeit wo der SPieler läuft das Spiel wie bei sleep ansonsten nicht mehr reagiert. Und "Application.ProcessMessages;" bringt auch keine Hilfe :(

Ok die Procedure selber ist wohl auch nicht das beste aber der Spieler kommt am Ziel an und das reicht mir erst mal ^^ Nur das eingeschlafen sein nervt mich..

Phistev 9. Sep 2005 17:42

Re: DelphiX - Bewegen ohne zu schlafen^^
 
Such mal nach Hier im Forum suchenDelay

/edit: Hier ist die Funktion

Neutral General 9. Sep 2005 17:43

Re: DelphiX - Bewegen ohne zu schlafen^^
 
Ich benutze ja gar kein sleep, da bringt mir Delay auch nix -.-
Das kommt ja von der while - Schleife...

Phistev 9. Sep 2005 17:50

Re: DelphiX - Bewegen ohne zu schlafen^^
 
Ein Delay(10) könnte schon was bringen...

Neutral General 9. Sep 2005 17:53

Re: DelphiX - Bewegen ohne zu schlafen^^
 
Könnte meiner Meinung nicht aber auch wenn es was bringen könnte, es bringt nix :D

devnull 9. Sep 2005 17:58

Re: DelphiX - Bewegen ohne zu schlafen^^
 
Kann man sowas nicht einfach mit Timern lösen, die laufen doch auch parallel??
Was benutzt du eigentlich als Zeichenfläche? Delphix, ...

Er nimmt natürlich DelphiX :oops:

DGL-luke 9. Sep 2005 18:00

Re: DelphiX - Bewegen ohne zu schlafen^^
 
du solltest Bei Google suchentimebased movement einbauen.

Delphi-Quellcode:
function TPlayer.GetPosition():TVector3d;
var strecke:single;
begin
if self.fMoving then
 begin
  strecke:=speed / (gettickcount - fstarttime);
  {...} //hier die neue position berechnen
 end;
end;
@devnull: das hier is aber eleganter ;)

Neutral General 10. Sep 2005 11:12

Re: DelphiX - Bewegen ohne zu schlafen^^
 
Zitat:

Zitat von DGL-luke
du solltest Bei Google suchentimebased movement einbauen.

Delphi-Quellcode:
function TPlayer.GetPosition():TVector3d;
var strecke:single;
begin
if self.fMoving then
 begin
  strecke:=speed / (gettickcount - fstarttime);
  {...} //hier die neue position berechnen
 end;
end;
@devnull: das hier is aber eleganter ;)

Also das kapier ich grad gar nicht ^^
Aber das da oben war ja nur eine von meinen 2 Versuchen.

Delphi-Quellcode:
procedure TSpieler.Move2(x1,y1 : Single);
var Strecke : Double;
    xWeg,yWeg, xDiff,yDiff, Schritte,Steigung : Double;
    var i : Integer;
begin
  xWeg := x1 -x;
  yWeg := y1 -y;
  Strecke := Sqrt(Sqr(xWeg)+Sqr(yWeg));
  Schritte := Round(Strecke / 2);
  if Schritte = 0 then Schritte := 20;
  xDiff := xWeg / Schritte;
  yDiff := yWeg / Schritte;
  for i:= 1 to Round(Schritte) do begin
   x := x + xDiff;
   y := y + yDiff;
  end;
end;
Hier ist nur das Problem das die Bewegung viiiel zu schnell geht. Der Spieler ist sofort da. Also als so als wurde ich einfach
Delphi-Quellcode:
Spieler.x := x1;
Spieler.y := y1;
schreiben ...

DGL-luke 10. Sep 2005 11:36

Re: DelphiX - Bewegen ohne zu schlafen^^
 
Du musst nur drei Sachen definieren: Geschwindigkeit, Wegstrecke und Starzeit. Dann kannst du zu jederzeit berechnen, wo sich dein Objekt gerade befindet.

Neutral General 10. Sep 2005 11:50

Re: DelphiX - Bewegen ohne zu schlafen^^
 
Dein Link ist glaube ich ma ziemlich gut, ich glaube damit befasse ich mich mal näher... das könnte meine Lösung sein.. :)

Nur ne Frage :

Delphi-Quellcode:
VergangeneZeit:= (Zeit1-Zeit0)/Frequenz;
Was ist Zeit1 und Zeit0 ? bzw wann werden diese Zeiten besimmt ?

EDIT2 : Ich hab das Prinzip kapiert aber ich kanns nicht umsetzten -.-


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz