Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DirectX: Schnelles Text-Scrolling mit DirectDraw (https://www.delphipraxis.net/43870-directx-schnelles-text-scrolling-mit-directdraw.html)

Tyr123 9. Apr 2005 22:49


DirectX: Schnelles Text-Scrolling mit DirectDraw
 
Hallo Zusammen,

da ich hier jetzt neu bin, möchte ich zunächst alle herzlich begrüßen :)
Bin auch relativ neu bei DirectX, d.h. habe vor 6-7 Jahren mit DirectX 3.0 was probiert und war total begeistert wegen der Geschwindigkeit. Danach lange Pause...
Jetzt möchte ich einen schnellen Text-Scroller (so was wie ein Ticker von rechts nach links) im Fullscreen realisieren, aber die Geschwindigkeit lässt leider viel zu wünschen übrig.
Vielleicht kann mir hier jemand helfen... Also die relevante Routine (denke ich mal, dass es relevant ist :)):

Delphi-Quellcode:
// ********************************************
  FDisplay.Clear(0);
  FDisplay.Blt(intLeft, 10, FTextSurface, nil);
  inc(intleft);
  if intLeft > 300 then
    intLeft := 0;
  hr := FDisplay.Flip;
// ********************************************
Die FTextSurface ist immer die gleiche, es wird immer der gleiche Text gezeigt.
Habe auch versucht das in eine
Delphi-Quellcode:
while (true) do
begin
....
end;
Schleife zu packen. Hat nicht viel gebracht, ausser dass ich alles abschiessen musste, da nicht mehr zurückkommen konnte. *g*
Arbeite auf einem win2000 System mit DirectX 7.0 Header Dateien von Erik Unger.

Hat jemand einen Vorschlag, wie man das beschleunigen könnte? natürlich ohne in größeren Schritten zu inkrementieren, das sieht nicht aus...

Vielen Dank und
Viele Grüße
Tyr


...
nachdem ich gestern die halbe Nacht damit verbracht habe das Problem zu finden ist mir eingefallen, dass ich vielleicht einfach was unmögliches möchte :oops:
Also,ich bekomme immer die FPS Rate die der Bildfrequenz des Monitor entspricht. Also folglich kann ich nicht mehr als z.B. 60 Pixel in einer Sekunde scrollen bei einer FPS von 60... Klingt auch logisch, auch wenn ich es bisschen langsam finde. :kotz:
Ausser ich würde flackern in Kauf nehmen den double-puffer ausschalten...
Weiss jemand ob es bei DirectX geht? Ohne dieses FDisplay.Flip tut sich nichts...

Nochmals Danke und viele Grüße
Tyr

Phobeus 10. Apr 2005 11:17

Re: DirectX: Schnelles Text-Scrolling mit DirectDraw
 
Also ohne, dass ich mich näher damit auseinander gesetzt habe, sind mir beim lesen zwei kleine Denkfehler aufgefallen. 1. Du scheinst als Bewegungs-Variable einen Integer zu nehmen. Das mag vielleicht sinnvoll erscheinen, da der Bildschirm ja eben einen Pixel als kleinste Einheit nur versteht. Allerdings schränkt einen dies ungemein bei der Berechnung ein. Es bietet sich meistens eher an, dass einen Float-Typen zu nehmen und diesen für die Berechnung zu nehmen und dann halt auf "Pixel" zu runden. Auf diese Weise erreichst Du ein "feineres bewegen".
Der zweite gedankliche Fehler ist wohl schwerer nachzuvollziehen. Du gehst momentan davon aus, dass dein Rechner 60 FPS hat. Vermutlich weil Du VSync an hast oder wohl noch eher, weil Du einen TFT hast. Wenn jemand mit einem CRT davor sitzt in 20 Jahren wird er die Texte nur so fliegen haben. Deine Bewegungsgeschwindigkeit richtet sich nämlich nach den Frames, dabei sollte diese sich lieber nach der Zeit richten, also bei jedem Durchgang die Zeitspanne zum vorherigen Bild messen und danach die Geschwindigkeit entsprechend anpassen. Mit dieser Methode erreichst Du nicht nur, dass das Programm auf allen Rechner gleich schnell läuft, sondern das auch ein im Hintergrund anspringender Indizierungsdienst im System nicht plötzlich zu rucklern oder unterschiedlichen Geschwindigkeiten führt. Bei mir auf der Seite unter Tutorials=>Spieletutorials=>Bomberman2 ist ziemlich oberhalb das "TimeBased Movement" erklärt. Auch der Source Code könnte Dir evtl. helfen. Ist zwar OpenGL, allerdings ist die Technik 1:1 zu übernehmen.
Hoffe wenigstens ein wenig geholfen zu haben ;)

Tyr123 10. Apr 2005 22:09

Re: DirectX: Schnelles Text-Scrolling mit DirectDraw
 
Hallo,

danke für die Antwort, da hast Du natürlich recht, besonders bei dem zweiten Punkt. Merke es jetzt schon, gerade weil ich es über OnIdle Event laufen lasse, wenn der Rechner was beschäftigt ist. Und sowas darf nicht sein :)

Viele Grüße
Tyr

Ruppi 12. Apr 2005 20:15

Re: DirectX: Schnelles Text-Scrolling mit DirectDraw
 
DirectDraw ist nurnoch wegen abwärtskompatibilität vorhanden
Direct3D verwenden und ID3DXFont.
Dann sollte das ganze mit 500 FPS flüssig laufen

(bei fragen hier oder bei http://www.delphidev.de/ forum für delphi+directX programmierer.)

mfg
Ruppi


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