![]() |
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:
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 :(
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; 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.. |
Re: DelphiX - Bewegen ohne zu schlafen^^
|
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... |
Re: DelphiX - Bewegen ohne zu schlafen^^
Ein Delay(10) könnte schon was bringen...
|
Re: DelphiX - Bewegen ohne zu schlafen^^
Könnte meiner Meinung nicht aber auch wenn es was bringen könnte, es bringt nix :D
|
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: |
Re: DelphiX - Bewegen ohne zu schlafen^^
du solltest
![]()
Delphi-Quellcode:
@devnull: das hier is aber eleganter ;)
function TPlayer.GetPosition():TVector3d;
var strecke:single; begin if self.fMoving then begin strecke:=speed / (gettickcount - fstarttime); {...} //hier die neue position berechnen end; end; |
Re: DelphiX - Bewegen ohne zu schlafen^^
Zitat:
Aber das da oben war ja nur eine von meinen 2 Versuchen.
Delphi-Quellcode:
Hier ist nur das Problem das die Bewegung viiiel zu schnell geht. Der Spieler ist sofort da. Also als so als wurde ich einfach
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;
Delphi-Quellcode:
schreiben ...
Spieler.x := x1;
Spieler.y := y1; |
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.
|
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:
Was ist Zeit1 und Zeit0 ? bzw wann werden diese Zeiten besimmt ?
VergangeneZeit:= (Zeit1-Zeit0)/Frequenz;
EDIT2 : Ich hab das Prinzip kapiert aber ich kanns nicht umsetzten -.- |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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