Halöchen,
ich habe da ein kleines Problem mit Timern. Und zwar habe ich ein Programm das im Paint-Event etwas zeichnet (zum Beipsiel ein 4-Eck). Jetzt habe ich einen Timer genommen der das Ding jede ms um 1 Pixel verschiebt. Das ist aber grottenlangsam, und sobald ich mehr als 3-5 Pixel nehme fängt der an zu "hüpfen", er gleitet quasi nicht mehr smooth ober das Fenster.
Wie kann ich jetzt hinbekommen das das 4-Eck Affenschnell & Smooth ist? Ich habe mich schonmal umgesehen und 4 Timer gefunden (System.Threading.Timer; System.Timers.Timer;System.Windows.Forms.Timer) und weiss jetzt nich wo genau die sich unterscheiden. Ich hehme bisher den Forms.Timer.
Was könnt ihr mir dazu sagen?
MFG Don
(Und wie zum teufel kiann ich meinen Nick ändern? ;-))
Seite 1 von 1
Timer Problem C#
Anzeige
#2
geschrieben 27. März 2006 - 13:42
Wie schonmal in einen anderen Post erwähnt: Die .NET-Timer und Events arbeiten im 10ms Bereich. Das heißt, sie werden alle 10ms aufgerufen, so dass es halt zu diesen "Hüpfern" kommt.
Ich weiß leider nicht, ob in diesem Fall der High-Performance Timer was bringt. Musste mal ausprobieren...
Ich weiß leider nicht, ob in diesem Fall der High-Performance Timer was bringt. Musste mal ausprobieren...
#3
geschrieben 27. März 2006 - 14:15
Stimmt sorry, hatte das ja schonmal angerissen.
Was ist denn ein High-Performance Timer. Und vor alles WELCHER von den 3 ist es?
Was ist denn ein High-Performance Timer. Und vor alles WELCHER von den 3 ist es?
#6
geschrieben 27. März 2006 - 17:02
Ja sorry, habs voll verpennt. aber das problem was ich damit hatte war, das ich damit zeit messen kann aber nicht einen richtigen Timer bauen kann der nach 0,0000000005 ms ein event aufruft. Zumindest hab ich da so meine Probleme mit.
hat jemand einen Ratschlag?
hat jemand einen Ratschlag?
#7
geschrieben 28. März 2006 - 09:57
Don, windows wie linux sind keine echtzeitbetriebssysteme, man kann damit keine so genauen timerevents machen... was du machen kannst, ist, die vergangene zeit seit dem letzten aufruf abfragen und das event entsprechend der vergangenen zeit verbiegen.
selbst da kannst du dir nicht sicher sein, dass nicht just in diesem moment ein anderer prozess/thread an der reihe ist. schlag dir so superzeitsensible anwendungen lieber gleich wieder aus dem kopf und geh das problem von einer anderen seite an.
mach doch einen "zeichentimer", der, wenn aufgerufen rausfindet, wieviel zeit seit dem letzten aufruf vergangen ist, anhand der vergangenen zeit ausrechnet, wie weit die punkte gehüpft sind und diese dann zeichnet.
selbst da kannst du dir nicht sicher sein, dass nicht just in diesem moment ein anderer prozess/thread an der reihe ist. schlag dir so superzeitsensible anwendungen lieber gleich wieder aus dem kopf und geh das problem von einer anderen seite an.
Zitat
Jetzt habe ich einen Timer genommen der das Ding jede ms um 1 Pixel verschiebt. Das ist aber grottenlangsam
mach doch einen "zeichentimer", der, wenn aufgerufen rausfindet, wieviel zeit seit dem letzten aufruf vergangen ist, anhand der vergangenen zeit ausrechnet, wie weit die punkte gehüpft sind und diese dann zeichnet.
I'm mó. mo's good twin.
#8
geschrieben 28. März 2006 - 11:03
Das es keine Echzeitsysteme sind weiß ich, nur ich suche nach einer Möglichkeit ein simples Pong zu programmieren was NAHEZU perfekt funzt. Das muss doch irgendwie richtig zu Timen sein !?
Der Vorschlag wäre einen Verusch wert. Nur irgendwie muss das ja gehn. Wie issn das mit 2d Spielen generell?
Der Vorschlag wäre einen Verusch wert. Nur irgendwie muss das ja gehn. Wie issn das mit 2d Spielen generell?
#9
geschrieben 28. März 2006 - 13:19
Hi,
evtl. hilft dir DoubleBuffering weiter.
Es gibt die Möglichkeit festzulegen, dass ein Control zuerst in einen Buffer gezeichnet wird. Erst nachdem diese Aktion komplett abgeschlossen ist, wird das Control dargestellt.
Damit kann man das "Flackern" einer Form verhindern - evtl. hilft es auch bei deinem Problem weiter.
Hab dir mal ein kleines Beispiel angehängt.
DoubleBuffer.zip (29,92K)
Anzahl der Downloads: 121
Viel Spaß
evtl. hilft dir DoubleBuffering weiter.
Es gibt die Möglichkeit festzulegen, dass ein Control zuerst in einen Buffer gezeichnet wird. Erst nachdem diese Aktion komplett abgeschlossen ist, wird das Control dargestellt.
Damit kann man das "Flackern" einer Form verhindern - evtl. hilft es auch bei deinem Problem weiter.
private void EnableDoubleBuffer()
{
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
}
Hab dir mal ein kleines Beispiel angehängt.

Anzahl der Downloads: 121
Viel Spaß

Thema verteilen:
Seite 1 von 1