Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Portabilität der Grafik (https://www.delphipraxis.net/84740-portabilitaet-der-grafik.html)

Semikolon 20. Jan 2007 23:57


Portabilität der Grafik
 
Als ich in einem anderen Thread diesen Post gelesen habe:

Zitat:

Zitat von inherited
Zitat:

Zitat von toms
Zitat:

Zitat von Semikolon
if key=vk_right then image1.left:=image1.left+100

Wenn ich dann also Rechts gedrückt halte bewegt sich das Image rasant schnell vorwärts.

...oder du veränderst die Konstante 100 und schreibst z.B + 20.

Was ziemlich Dumm wäre, weil dann die Geschwindigkeit mit der sich das Image bewegt von PC zu PC unterschiedlich ist.

Bin ich auf meine Frage gekommen und zwar:

Situation1:Ich habe vor langer Zeit Visual Basic Programme entwickelt auf einem 450mhz k6-2 in 800x600.Auf meinem neuen Laptop läuft aber alles viel zu schnell ab.Ich habe damals die Bewegung der Bilder über .left=.left+irgendwas und Timer gesteuert.

Situation2:Ich habe fürs Studium ein Programm in Delphi 5 gemacht,was lineare Funktionen grafisch darstellt.Ich habe Leider war dieses nur auf einer bestimmten Auflösung ausführbar,bei kleineren Auflösungen als 1280x800(entwicklungsauflösung) war was von dem Formfenster abgeschnitten.


Wie kann ich Punkt 1 und 2 in Delphi vermeiden? :o

inherited 21. Jan 2007 00:03

Re: Portabilität der Grafik
 
Für Situation 1:
DosBox benutzen oder Programme schreiben welche ein "MainLoop" enthalten, in denen nur alle X Millisekunden auf, zB Keys reagiert wird.

zB mit dem OnIdle-Event der Application. Dieses einer eigenen Funktion zuweisen und dort soetwas wie
Delphi-Quellcode:
if GetTickCount>StartTickcount+250 then
begin
  StartTickCount:=GetTickCount;
  DoThis:=DoThat(42);
end;

Semikolon 21. Jan 2007 00:06

Re: Portabilität der Grafik
 
Das waren ganz normale Windowsanwendungen,soll ich da trotzdem die Dosbox verwenden(ich hab sie)?
---
Könnte es vielleicht an den Timern gelegen haben? :|

inherited 21. Jan 2007 00:11

Re: Portabilität der Grafik
 
:wall:
Ich habe QuickBasic gelesen, frag mich nicht warum. Sorry. Dann natürlcih nicht DosBox.
Wegen den Timern: kommt auf die Timer an und deren Interval

Antigo 21. Jan 2007 09:55

Re: Portabilität der Grafik
 
servus,
das stichwort wäre timebased movement. Das heisst du rufst mit einem timer, einem thread oder in einer repeat Schleife wie gewohnt deine Bewegungsprozedur auf. Der Knackpunkt kommt jetzt. Du guckst bei jedem Aufruf der Bewegungsprozedur nach wieviel Zeit seit dem letzten Aufruf vergangen ist und gehst entsprechend viele Schritte in die Gewünschte Richtung. Wenn du also festlegst, dass du pro Sekunde gerne 100 Pixel gehen möchtest, gehst du mit dieser Methode auf _jedem_ Rechner auch 100 Pixel pro Sekunde. Auf schnellen Rechnern wengiger Ruckelnd, da die Prozedur öfter und mit kleineren Schritten ausgeführt wird, und auf langsameren eben ruckelnder.

Um an die zeitliche Differenz zu kommen hilft gettickcount();


Zu dem zweten Problem wüsste ich allerdings auch keine wirklich gute Lösung. Ich schreib meine Programme immer so das sie unter 1024er Auflösung laufen, denn niedrigere hat kaum noch jemand. Du müsstesr die Komponenten auf deiner Form halt an die Größe der Form binden und alles dynamisch halten. Allerdings sieht es dann bei kleinen Auflösungen gequetscht aus und bei größeren ist zuviel Platz. Da hab ich bisher auch noch keine vernünftige Lösung gefunden...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 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