![]() |
Delphi-Version: 5
Image.position ohne Anfangsgeruckel
Hallo zusammen,
Ich programmiere gerade ein Spiel, für das ich die Position eines TImages ändern will. Also so ähnlich: image1.position.x:= image1.position.x + 5; Dieser obige Code wird immer aktiv, wenn ich eine Taste auf der Tastatur drücke.. bisher noch kein Problem. Wenn ich die Taste gedrückt halte, führt er den Befehl immer wieder aus, was ebenfalls gut ist. Also ungefähr so: procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;Shift: TShiftState); begin if Key = VKRight then begin Mario.Position.X:=Mario.Position.X +8; Das Problem ist, dass das Bild sich am Anfang zuerst langsamer bewegt und dann erst mit normaler Geschwindigkeit. (Wenn Sie nicht wissen was ich meine: Das gleiche passiert, wenn man einfach nur ein Timage erstellt und es dann mit STRG + beliebige Pfeiltaste steuert und die Pfeiltaste gedrückt hält. -> zuerst langsam, dann schneller) Frage: Wie bekomme ich eine sofortige gleichbleibende Geschwindigkeit mit meinem Code hin? MFG derseitzer |
AW: Image.position ohne Anfangsgeruckel
Das gleiche bekommst du zum Beispiel in der Delphi-Praxis: Tippe doch mal einen Text und halte z.B. die Taste D gedrückt: ddddddddddddddddddd.
Mehr bekommt das
Delphi-Quellcode:
-Ereignis der Form auch nicht mit, ist nun mal so. Mit
OnKeyDown
Delphi-Quellcode:
ist es ähnlich. Jetzt frage ich mich auch: Was macht man da? Einen Keyboard-Hook?
OnKeyPress
|
AW: Image.position ohne Anfangsgeruckel
Ja genau. Gibt es dann keine Möglichkeit z.B. eine Figur, die mit Pfeiltasten steuerbar sein soll, ohne diesen Effekt zu bewegen???
|
AW: Image.position ohne Anfangsgeruckel
Das ist doch eine Windows-Einstellung (Einstellungen -> Tastatur -> Verzögerung) und so ziemlich das erste, was ich an einem Windows-PC immer hochstelle, weil mich die Verzögerung tierisch nervt.
|
AW: Image.position ohne Anfangsgeruckel
Du könntest auch im KeyDown einen Timer starten der mit einem festen Intervall abläuft. Im KeyUp wird der Timer dann wieder gestoppt. Und im Timer Event bewegst du entsprechend dein Image.
|
AW: Image.position ohne Anfangsgeruckel
Ok ich bedanke mich erstmal für eure Tipps!
Das mit der Windows-Einstellung ist richtig aber natürlich eine schlechte Option, falls ich das Spiel auch auf anderen Computern spielen möchte. Ich werde es mal mit Timern probieren danke:) |
AW: Image.position ohne Anfangsgeruckel
Panel1, darauf Image1, mit Code unten ruckelt nichts:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin case Key of VK_UP: Panel1.Top:= Panel1.Top-5; VK_DOWN: Panel1.Top:= Panel1.Top+5; VK_LEFT: Panel1.Left:= Panel1.Left-5; VK_RIGHT: Panel1.Left:= Panel1.Left+5; end; |
AW: Image.position ohne Anfangsgeruckel
Es geht im Endeffekt um die "Repeat-Rate" der Tastatur. Also dass es erst einen Sprung macht, dann Pause, und dann schnell wiederholend, nicht um den Bildaufbau selber.
|
AW: Image.position ohne Anfangsgeruckel
Vielleicht ist die CPU einfach zu langsam - oder die GPU...
Meine Tastatur sendet 31 Zeichen/sec. Mit FormKeyDown zähle ich max. 27.
Delphi-Quellcode:
function GetKeySpeed: Integer;
var I: LongBool; Value: Integer; begin I := SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, @Value, 0); Result := Value; end; |
AW: Image.position ohne Anfangsgeruckel
Gab es nicht so etwas wie GetKeyState?
Dann würde man in einer Schleife immer wieder prüfen, welche Tasten JETZT GERADE gedrückt sind und nicht Tastaturereignisse abarbeiten. Das hat natürlich den Nachteil, dass es aufwendiger wäre und man alle Varianten berücksichtigen muss, um die Schleife auch wieder beenden zu können. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 Uhr. |
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-2025 by Thomas Breitkreuz