AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Application Processmessages zum bewegen von Charakteren
Thema durchsuchen
Ansicht
Themen-Optionen

Application Processmessages zum bewegen von Charakteren

Ein Thema von Flogo · begonnen am 1. Dez 2003 · letzter Beitrag vom 11. Feb 2004
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#1

Application Processmessages zum bewegen von Charakteren

  Alt 1. Dez 2003, 16:53
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:
Ziel := TempZiel;
result := false;
repeat
  application.processmessages;
  if Ziel <> TempZiel then exit;
until Position = Ziel;
result := true;
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

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]
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
WtF

Registriert seit: 24. Nov 2003
Ort: Nähe München
72 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Application.processmessages zum bewegen von Charakteren

  Alt 2. Dez 2003, 08:19
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
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#3

Re: Application.processmessages zum bewegen von Charakteren

  Alt 2. Dez 2003, 08:31
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#4

Re: Application Processmessages zum bewegen von Charakteren

  Alt 2. Dez 2003, 19:16
@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 Aber "es wächst" also warum nicht die Gelegenheit nutzen und was über Threads lernen
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
WtF

Registriert seit: 24. Nov 2003
Ort: Nähe München
72 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Application Processmessages zum bewegen von Charakteren

  Alt 3. Dez 2003, 07:50
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

http://www.luckie-online.de/tutorials/threads/

[edit=Luckie]Anhang durch Link ersetzt. Da ist nämlich noch mehr. Mfg, Luckie[/edit]
Steffen
Was meinst du als unbeteiligter eigentlich zum Thema Intelligenz ? Keep it real, Respect!
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Application Processmessages zum bewegen von Charakteren

  Alt 3. Dez 2003, 10:14
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

Threads dafür sind 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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Application Processmessages zum bewegen von Charakteren

  Alt 3. Dez 2003, 10:28
Zitat von MyRealName:
Threads dafür sind unsinn !
Und warum? Threads sinbd dafür sehr wohl geeignet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Application Processmessages zum bewegen von Charakteren

  Alt 3. Dez 2003, 13:28
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 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

MyRealName
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#9

Re: Application Processmessages zum bewegen von Charakteren

  Alt 3. Dez 2003, 14:24
Wie würde das denn ohne/mit Threads gehen? könntet ihr mir ein bisschen Code geben
Ich muss ja zugeben ich fürcht mich noch vor den Threads 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.
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#10

Re: Application Processmessages zum bewegen von Charakteren

  Alt 9. Dez 2003, 19:29
Hab mir das Threadtutorial jetzt durchgelesen aber 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 und freu mich deshalb über jede Hilfe
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 06:45 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