![]() |
Anhalten bei Image-Bewegung verhindern
Hi..
Ich hab ein Image und folgenden Code um es auf Tastendruck zu bewegen:
Delphi-Quellcode:
Nun habe ich das Problem, dass wenn ich die Taste gedrückt halte sich das Schiff 10 Pixel nach links bewegt, für ein parr Millisekunden stoppt, dann weiter durchgängig immer weiter nach links geht.
procedure TFormMain.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin If key=37 then ImageChar.Left := ImageChar.Left - 10; end; Wie kann ich das Stoppen nach dem ersten Bewegen verhindern? |
Re: Anhalten bei Image-Bewegung verhindern
Das liegt am Tastarturtreiber und ist in Delphi nur schwer (wenn überhaupt) umgehbar.
Ratte |
Re: Anhalten bei Image-Bewegung verhindern
Moin DarK.The.KiD,
man müsste halt die Wiederholrate heraufsetzen, denke ich. Dies würde dann allerdings Systemweit gelten. |
Re: Anhalten bei Image-Bewegung verhindern
Ich programmiere einen Weltraumshooter. Gibt es eine andre Möglichkeit das Raumschiff zu bewegen, ohne das es nach dem ersten Ruck stehen bliebt?
|
Re: Anhalten bei Image-Bewegung verhindern
Ich hab mal so was ähnliches programmiert (auch erst mit images).
Und ich hatte genau dein Problem. Deshalb bin ich auf DelphiX umgestiegen. Damit lässt sich so was gut realisieren (ein sample ist auch dabei) |
Re: Anhalten bei Image-Bewegung verhindern
Starte die Bewegung wenn die taste gedrückt (keydown) wird indem du eine variable auf true setzt. In einem timer mit sehr hoher frequenz prüfst du diese Variable ab und bewegst das Objekt ein kleines Stück. Wenn die taste wieder losgelassen wurde (keyup) setzt du deine variable wieder auf false.
|
Re: Anhalten bei Image-Bewegung verhindern
Liste der Anhänge anzeigen (Anzahl: 1)
So geht es auch einigermaßen. Aber ich tendiere trozdem zu Delphix
Delphi-Quellcode:
Hier ein DelphiX Sample:
var
Form1: TForm1; move: boolean; implementation {$R *.DFM} procedure TForm1.Timer1Timer(Sender: TObject); begin if move = true then image1.left := image1.left+1; application.ProcessMessages; end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if ord(key) = vk_Return then begin if move = false then move := true else move := false; end; end; |
Re: Anhalten bei Image-Bewegung verhindern
Auch wenn mich wundert wie so ein Spiel fast 1 MB groß sein kann, die tastensteuerung funktioniert tadellos.
Für einen Weltraumschiffballerspiel würde ich aber ein anderes Konzept vorschlagen, denn so gibt es nur zwei Geschwindigkeiten, null und vollgas. Vielmehr sollte es so gestaltet werden das je länger der Tastendruck andauert desto schneller wird das Objekt (bis zu einer gewissen Grenze) und beim loslassen geht die Geschwindigkeit wieder allmählich auf Null zurück. Läßt sich auch über keydown und keyup realisieren (sicher auch mit DelphiX). Dadurch kommt so etwas wie realistische Trägheit ins Spiel. Das könnte ganz grob beschrieben so aussehen: var bewegung:boolean = false; geschwindigkeit:integer = 0; keydown: if not bewegung then bewegung:= gedrückte_Taste = Bewegungstaste; ----------------------- keyup: if bewegung then bewegung:= not (gedrückte_Taste = Bewegungstaste); ----------------------- ontimer: if (bewegung) and ( geschwindigkeit < obergrenze) then inc(geschwindigkeit); if (not bewegung) and (geschwindigkeit >0) then dec(geschwindigkeit); inc(position,geschwindigkeit); ------------------------------ Wenn du das ganze füe alle Richtungen umsetzt dann sieht das toll aus :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:36 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