GDI: Move Rect. using KeyDown/Up and Timer
-
Hallöchen Zusammen
Ich möchte ein Rechteck auf meiner Form mit den Tasten a,s,d,w bewegen können. Folgender Code als Ansatz:
private void Form1_KeyDown(object sender, KeyEventArgs kea) { kea.Handled = true; if (kea.KeyData == Keys.A) { graphics.DrawRectangle(myPen_del, a, b, 30, 30); a -= 4; graphics.DrawRectangle(myPen, a, b, 30, 30); } }
... dies habe ich nun für alle Tasten (w,s,a,d) gemacht oO
(myPen.Color = black; myPen_del.Color = gray; Form.Background = gray)
Wenn ich jedoch dies so ausführe und die Taste wechsle (z.B. von a auf w) dann stockt das Rect. ein wenig und der Bewegungsablauf ist nicht mehr flüssig. Dies liegt jetzt am Keyboard Delay (welcher in der Syst.Steuerung einrichtbar ist).
Nun muss es einen Weg geben über KeyDown/Up zu berechnen, welche Tasten gedrückt sind und einen eigenen Timer einzufügen damit die Bewegungen fliessend sind.
Hat hierfür jemand ein gutes Tutorial oder einen Sample CodeBin hier an einem Punkt angelangt, wo ich nicht mehr weiss wie weiter
Danke schonma fürs Durchlesen
-
Nimm dir ne Variable bool keypressed_w=false;
...setz die bei KeyDown auf true und bei KeyUp wieder auf false.Das eigentliche Zeichnen dann z.B. via Timer machen...
...und wenn das auch noch zu ruckelig ist, schau mal bei den Spieleprogrammierern hier vorbei