AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Anhalten bei Image-Bewegung verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

Anhalten bei Image-Bewegung verhindern

Ein Thema von DarK.The.KiD · begonnen am 10. Okt 2004 · letzter Beitrag vom 12. Okt 2004
Antwort Antwort
DarK.The.KiD
(Gast)

n/a Beiträge
 
#1

Anhalten bei Image-Bewegung verhindern

  Alt 10. Okt 2004, 15:08
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?
  Mit Zitat antworten Zitat
Ratte

Registriert seit: 12. Dez 2003
Ort: Erfurt
345 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Anhalten bei Image-Bewegung verhindern

  Alt 10. Okt 2004, 15:24
Das liegt am Tastarturtreiber und ist in Delphi nur schwer (wenn überhaupt) umgehbar.

Ratte
Schiffsratte der U.S.S. Delphipraxis, Laderaum 4538
BUSH:= TTerminator.create;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Anhalten bei Image-Bewegung verhindern

  Alt 10. Okt 2004, 15:52
Moin DarK.The.KiD,

man müsste halt die Wiederholrate heraufsetzen, denke ich.
Dies würde dann allerdings Systemweit gelten.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
DarK.The.KiD
(Gast)

n/a Beiträge
 
#4

Re: Anhalten bei Image-Bewegung verhindern

  Alt 12. Okt 2004, 17:17
Ich programmiere einen Weltraumshooter. Gibt es eine andre Möglichkeit das Raumschiff zu bewegen, ohne das es nach dem ersten Ruck stehen bliebt?
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: Anhalten bei Image-Bewegung verhindern

  Alt 12. Okt 2004, 18:18
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)
  Mit Zitat antworten Zitat
Benutzerbild von Ben1
Ben1

Registriert seit: 11. Okt 2004
Ort: Rostock
36 Beiträge
 
Delphi 6 Personal
 
#6

Re: Anhalten bei Image-Bewegung verhindern

  Alt 12. Okt 2004, 18:21
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.
Ben
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

Re: Anhalten bei Image-Bewegung verhindern

  Alt 12. Okt 2004, 18:26
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:
Angehängte Dateien
Dateityp: rar spaceadventure.rar (549,2 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Ben1
Ben1

Registriert seit: 11. Okt 2004
Ort: Rostock
36 Beiträge
 
Delphi 6 Personal
 
#8

Re: Anhalten bei Image-Bewegung verhindern

  Alt 12. Okt 2004, 19:02
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
Ben
  Mit Zitat antworten Zitat
Antwort Antwort


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