![]() |
Application Processmessages zum bewegen von Charakteren
Sorry ich war mir nicht ganz sicher mit der Kategorie aber da es aus einem Spiel kommt und sich vielleicht anwendungsbezogen auch ganz anders lösen lässt hab ichs mal hier reingestellt (in der Hoffnung, dass sich hier ein Spieleprogger findet der das gleiche Problem hatte).
Also; es geht um ein 2D-Point'n'Klick-Adventure bei dem man an bestimmte Stellen des Screens klicken kann. der Charakter läuft dann an die entsprechende Stelle. Wenn man während er unterwegs ist eine andere Stelle anklickt läuft er direkt dahin. Ich habe das realisiert indem ich eine TPoint Variable (Ziel) genommen habe und die bei einem Klick auf die entsprechenden Koordinaten gesetzt habe. Ein Timer verschiebt das Bild des Charakters immer einen Schritt in Richtung Ziel. Soweit klappt das auch ganz gut nur will ich jetzt manchmal folgendes machen: Laufe dahin, wenn du angekommen bist tue... Das Hab ich folgendermaßen versucht:
Delphi-Quellcode:
Leider wird der Timer nicht im Application.processmesasages ausgelöst -> Das Spiel hängt sich in einer Endlosschleife auf, Die Figur bewegt sich keinen Milimeter :gruebel:
Ziel := TempZiel;
result := false; repeat application.processmessages; if Ziel <> TempZiel then exit; until Position = Ziel; result := true; Ich hoffe das war jetzt nicht zu kompliziert und irgendjemand da draußen kann mir helfen [edit=sakura] Leerzeichen in den Titel eingefügt. Mfg, sakura[/edit] |
Re: Application.processmessages zum bewegen von Charakteren
Hallo Flogo,
Wie wärs wenn du deinen eigenen Timer schreibst, und die zeit in der schleife überprüfst. Dann überspringt er das event vieleicht nicht, kannst ja mal ausprobieren. Mfg |
Re: Application.processmessages zum bewegen von Charakteren
Da wirst Du mit Processmessages ein Problem haben.
Ich würde hergehen, und einen eigenen Thread alleine mit dem Neuzeichnen beauftragen und die Position der Figur in einem weiteren setzen. In der (komplexen) Spieleprogrammierung wirst Du früher oder später sowieso nicht um Threads herumkommen. |
Re: Application Processmessages zum bewegen von Charakteren
@WtF:
Wie genau meinst du das mit dem Zeit überprüfen? @Phoenix: Warum spinnt das App.ProMess da? Führt denn wirklich kein Weg an Threads vorbei? Wenn nicht: Kannst du mir ein gutes Tutorial empfehlen oder ein Stückchen code geben? Ich hab nämlich keine Ahnung von Threads. PS: Ursprünglich sollte es gar nicht so komplex werden. Als ich angefangen hab wußte ich noch nicht mal was von OOP :oops: Aber "es wächst" also warum nicht die Gelegenheit nutzen und was über Threads lernen |
Re: Application Processmessages zum bewegen von Charakteren
Hier ich hab n thread tuturial von Luckie drangehangen.
Das mit der Zeit: Du speichert die zeit an einer stelle und an der nächstens überprüfst du ob schon die gewünschte zeit erreicht ist. Aber ich geb dir auch den Tip mit Threads zu arbeiten! Guck dir lieber das tut an und versuche dein glück!Und geh mal auf Luckies Homepage, da findest du alles mögliche. Mfg ![]() [edit=Luckie]Anhang durch Link ersetzt. Da ist nämlich noch mehr. :zwinker: Mfg, Luckie[/edit] |
Re: Application Processmessages zum bewegen von Charakteren
Das Problem mit ProcessMessages ist ja bei Dir das, daß Du alle anderen und Dich selbst aufforderst, die Nachrichtenwarteschlange abzuarbeiten. Du hast aber keine Nachricht in der Queue, die das Sprite bewegt :P
Threads dafür sind :warn: unsinn ! Es reicht vollkommen aus, wenn Du Dir per HiResTimer die Position des Sprites änderst und es zum Neuzeichnen auffordest. Das kann zum Bsp durch PostMessage passieren. LG, MyRealName |
Re: Application Processmessages zum bewegen von Charakteren
Zitat:
|
Re: Application Processmessages zum bewegen von Charakteren
Meiner Meinung nach sinnloser Overhead. Genannte Windows-Messages reichen dafür aus. Threads bringen Inkonsistenz ins Programm und 'ne Menge Verwaltungsaufwand (EnterCriticalSection etc.). Nix geht über das gute alte PostMessage :cheers: SendMessage...
Ich würde sogar soweit gehen zu sagen, mein Prog macht nicht mehr als 25-30 frames, weil man eh ned mehr anzeigen braucht, egal, wie schnell die cpu ist. Den Rest der Zeit idle ich lieber rum :mrgreen: MyRealName |
Re: Application Processmessages zum bewegen von Charakteren
Wie würde das denn ohne/mit Threads gehen? könntet ihr mir ein bisschen Code geben :roll:
Ich muss ja zugeben ich fürcht mich noch vor den Threads :duck: ich verlier so schon fast den Überblick. Wenns also irgendwie einfacher geht nur her damit. Werd mir aber auf jeden Fall auch mal das Thread Tutor durchlesen. |
Re: Application Processmessages zum bewegen von Charakteren
Hab mir das Threadtutorial jetzt durchgelesen aber :wall: ich verstehs immer noch nicht.
Was muss ich denn in den Thread auslagern: Den Timer? oder die Funktion zum Wegberechnen? oder die Funktion zum Zeichnen? Soll ich die gesammten Objekte in den Thread stellen oder nur einzelne Proceduren? Wie komm ich jetzt an die Meldung "Angekommen" oder "Ziel geändert"? brauch ich dazu nicht wieder ein Application.ProcessMessages im Haupt-Thread? Ihr seht ich hab immer noch keine Ahnung :oops: und freu mich deshalb über jede Hilfe :thuimb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:27 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 by Thomas Breitkreuz