Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Anhalten bei Image-Bewegung verhindern (https://www.delphipraxis.net/31500-anhalten-bei-image-bewegung-verhindern.html)

DarK.The.KiD 10. Okt 2004 14:08


Anhalten bei Image-Bewegung verhindern
 
Hi..

Ich hab ein Image und folgenden Code um es auf Tastendruck zu bewegen:

Delphi-Quellcode:
procedure TFormMain.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 If key=37 then
  ImageChar.Left := ImageChar.Left - 10;
end;
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.

Wie kann ich das Stoppen nach dem ersten Bewegen verhindern?

Ratte 10. Okt 2004 14:24

Re: Anhalten bei Image-Bewegung verhindern
 
Das liegt am Tastarturtreiber und ist in Delphi nur schwer (wenn überhaupt) umgehbar.

Ratte

Christian Seehase 10. Okt 2004 14:52

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.

DarK.The.KiD 12. Okt 2004 16:17

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?

Zacherl 12. Okt 2004 17:18

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)

Ben1 12. Okt 2004 17:21

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.

Zacherl 12. Okt 2004 17:26

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:
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;
Hier ein DelphiX Sample:

Ben1 12. Okt 2004 18:02

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 16:37 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