AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Image.position ohne Anfangsgeruckel

Ein Thema von derseitzer · begonnen am 18. Okt 2016 · letzter Beitrag vom 19. Okt 2016
Antwort Antwort
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Image.position ohne Anfangsgeruckel

  Alt 18. Okt 2016, 14:21
Delphi-Version: 5
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
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Image.position ohne Anfangsgeruckel

  Alt 18. Okt 2016, 14:28
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 OnKeyDown -Ereignis der Form auch nicht mit, ist nun mal so. Mit OnKeyPress ist es ähnlich. Jetzt frage ich mich auch: Was macht man da? Einen Keyboard-Hook?
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: Image.position ohne Anfangsgeruckel

  Alt 18. Okt 2016, 14:30
Ja genau. Gibt es dann keine Möglichkeit z.B. eine Figur, die mit Pfeiltasten steuerbar sein soll, ohne diesen Effekt zu bewegen???
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Image.position ohne Anfangsgeruckel

  Alt 18. Okt 2016, 14:36
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.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Image.position ohne Anfangsgeruckel

  Alt 18. Okt 2016, 14:44
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.
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#6

AW: Image.position ohne Anfangsgeruckel

  Alt 18. Okt 2016, 15:40
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
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#7

AW: Image.position ohne Anfangsgeruckel

  Alt 18. Okt 2016, 19:50
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;
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Image.position ohne Anfangsgeruckel

  Alt 18. Okt 2016, 20:44
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.
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#9

AW: Image.position ohne Anfangsgeruckel

  Alt 18. Okt 2016, 21:54
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;
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Image.position ohne Anfangsgeruckel

  Alt 19. Okt 2016, 12:23
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz