Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Timer.Interval<1 (https://www.delphipraxis.net/71096-timer-interval-1-a.html)

Martin.Ghosts 8. Jun 2006 22:14


Timer.Interval<1
 
Hallo zusammen,

ich habe ein kleines Problem mit der Timer-Komponente. Ich möchte einen Interval haben, der kleiner 1 ist. Ist mir jedoch klar, dass das nicht klappt (oder doch?). Nun habe ich versucht, eine "eigene" Timer-Komponente mit der Procedure sleep zu simulieren. Ich habe eine eigene Procedur erstellt, die am Ende die Procedure sleep ausführt und dann sich selbst wieder aufruft. Jedoch schläft dabei das Programm ein. Kennt jemand eine Möglichkeit, kleinere Intervalle als 1ms zu realisieren?

Schon mal danke für jegliche Hilfe,
Martin.Ghosts

SirThornberry 8. Jun 2006 22:16

Re: Timer.Interval<1
 
das macht keinen Sinn, alles unter ca. 20 ms macht keinen Sinn weil deine Windows deinem Programm in der Regel nicht viel mehr Zeit am Stück gibt. Wozu brauchst du einen so kleinen Interval? Da macht es doch eher sein das ganze in einer Schleife auszuführen ohne darin zu warten.

Martin.Ghosts 8. Jun 2006 22:21

Re: Timer.Interval<1
 
Ich bin ein klassisches Pongspiel am programieren und will den Ball immer um einen Pixel verschieben. Mit einem Interval von 1 ist er mir aber zu langsam. Bei einer Verschiebung von mehr als einem Pixel kann es passieren, dass der Ball teilweise den Rand des Formulars überschreitet.

himitsu 8. Jun 2006 22:25

Re: Timer.Interval<1
 
In DelphiX soll ein schnellerer Timer drin sein.

Aber warum immer nur ein Pixel ... mach doch Mehrere

Du kannst dir natürlich auch mit QueryPerformanceCounter, RealTimeStampCounter, oder ...
was eigenes aufbauen.

Matze 8. Jun 2006 22:26

Re: Timer.Interval<1
 
Zitat:

Zitat von Martin.Ghosts
Bei einer Verschiebung von mehr als einem Pixel kann es passieren, dass der Ball teilweise den Rand des Formulars überschreitet.

Aber nur so ergibt es Sinn. ;) Frag doch einfach ab:

Delphi-Quellcode:
if Ball.X <= linke_Wand then
  // links
else if Ball.X >= ...
else if Ball.Y <= ...

SirThornberry 8. Jun 2006 22:26

Re: Timer.Interval<1
 
sinnvoller wäre es wenn du die Position andauern um eins verschiebst (in einer Extra Variablen) und in geringeren Abständen dann den Ball zeichnest. Denn kleiner als 1ms macht da keinen Sinn, das sieht man nicht und die cpu wird vermutlich auch zu 100% ausgelastet sein. 25 Bilder (also 25 mal verschieben deines Balles) reicht vollkommen.

Florian H 8. Jun 2006 22:32

Re: Timer.Interval<1
 
esist doch auch möglich, ob bei einer Verschiebung von 20 Pixeln nach links z.b. der linke rand erreicht wird (x<=0) .. da muss man doch net jeden Pixel einzelnd prüfen.. so käme man bei größeren Computerspielen auch net weit ^^
Dann reicht ein Intervall von 20ms gut..

Martin.Ghosts 8. Jun 2006 22:39

Re: Timer.Interval<1
 
Zitat:

Aber nur so ergibt es Sinn. Wink Frag doch einfach ab:
Delphi-Quellcode:
Delphi-Quellcode:    markieren
if Ball.X <= linke_Wand then
  // links
else if Ball.X >= ...
else if Ball.Y <= ...

(zu Matze) Diese Abfrage mache ich schon. Aber der Ball geht erst einmal über den Rand hinaus und würde dann erst die Richtung wechseln (bei einer Verschiebung über 1 Pixel).


Zitat:

sinnvoller wäre es wenn du die Position andauern um eins verschiebst (in einer Extra Variablen) und in geringeren Abständen dann den Ball zeichnest.
(zu Sir Thornberry) Wie meinst du das? Ist das nicht genau das gleiche ergebnis wie bei mir?

SirThornberry 8. Jun 2006 22:41

Re: Timer.Interval<1
 
ich hab die Vermutung das du versuchst alle 1 ms ein TImage oder etwas anderes zu malen. Unter Windows dauert das malen aber von allem am längsten. Das heißt du solltest das Malen nur so häufig machen wie es wirklich nötig ist (also maximal 25 mal in der Sekunden). Ansonsten einfach nur die Position berechnen aber nichts verschieben

Matze 8. Jun 2006 22:45

Re: Timer.Interval<1
 
Zitat:

Zitat von Martin.Ghosts
(zu Matze) Diese Abfrage mache ich schon. Aber der Ball geht erst einmal über den Rand hinaus und würde dann erst die Richtung wechseln (bei einer Verschiebung über 1 Pixel).

Teste doch einfach vorm Verschieben, ob's drüber hinaus geht und verschiebe nach der Abfrage.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 Uhr.
Seite 1 von 2  1 2      

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