Frage von ysz0507, 50

Wie kann ich eine Pictureboxe schnell und flüssig bewegen?

Ich habe ein Spiel in welchem man Stangen ausweichen muss. Das Problem ist dass die Stangen immer schneller werden sollen. Da habe ich einen Timer(interval = 1) welcher die Picturebox um eins nach links verschiebt. Wenn ich die Picturebox jetzt aber um mehr als 1 (z.b. Um 4) verschiebe wird die Picturebox zwar schneller aber aber es läuft nicht flüssig.

Gibt es einen weg die Picturebox schnell und flüssig zu bewegen?

Antwort
von CrystalixXx, 35

Es spielt sowieso keine Rolle, ob du nun 1 oder 10 ms eingestellt hast.

The default system-wide timer resolution in Windows is 15.6 ms, which means that every 15.6 ms the operating system receives a clock interrupt from the system timer hardware.

Quelle: http://download.microsoft.com/download/3/0/2/3027D574-C433-412A-A8B6-5E0A75D5B23...

Diese (eigentlich) 15,625 ms ergeben sich aus dem "System Heartbeat", der typischerweise bei 64 HZ liegt. Durch unterschiedliche Einflüsse gibt es immer gewisse Schwankungen, weshalb ein Tick-Event des Timers auch erst nach 17 oder 20 Sekunden erneut ausgelöst wird. Mit einem solchen Timer-Objekt wirst du zumindest keine gescheite Lösung finden.

Es gäbe da noch Multimedia-Timers, die die größte Auflösung für die verwendete Hardware haben. Meiner Meinung nach solltest du aber den Grundsatz deiner Idee überarbeiten. Vielleicht kannst du die Positionsberechnung und -bewegung deiner Stangen zeit-optimieren. Eine andere Möglichkeit wäre die Stangen selbst zu zeichnen (anstatt resourcenbeanspruchende PictureBox-Steuerelemente zu verwenden) und dabei außerdem Bewegungsunschärfe reinzubringen, um die sprunghafte Bewegung zu kaschieren. Da wäre aber möglicherweise DirectX die bessere Wahl.

Kommentar von ysz0507 ,

Ok danke

Kommentar von ysz0507 ,

Wie kann ich "Bewegungsunschärfe" reinbringen?

Kommentar von CrystalixXx ,

Mir ist ein Fehler in meiner Antwort aufgefallen:

[...] weshalb ein Tick-Event des Timers auch erst nach 17 oder 20 Millisekunden [...]

Es muss Millisekunden heißen.

Zu deiner Frage: Wenn du unbedingt bei deiner Methode bleiben willst, dann kannst du das durch Semitransparenz erreichen. Wenn sich die Stange von links nach rechts bewegt, dann kannst du vom linken Ende der Stange ausgehend nach links mehrere Pixel mit fallendem Alpha-Wert zeichnen. Kurz: Du zeichnest ein Pixel mit 25% Alpha, daneben eines mit 50%, dann mit 75% und dann deine Stange (in vollen 100%). Da kann man ein wenig herum experimentieren, ob die Alpha-Abstufungen linear oder exponentiell sein sollen.

Keine passende Antwort gefunden?

Fragen Sie die Community