![]() |
Bewegungen in Welten
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich versuche ngerade nen kleines Spiel zu programmieren und habe etwas probleme mit der Steuerung. (Eine Demo habe ich als Anhang drin) Mit WASD Steuert man, das ganze habe ich mit RegisterHotkey() gemacht. Das Problem ist jetzt wenn ich in einem anderen Fenster z.b. schreiben möchte, dann bewegt sich der Charakter im Spiel und in dem anderen Fenster wird die Taste nicht angenommen. Weiß vielleicht einer wie ich das anders machen könnte? |
Re: Bewegungen in Welten
Schau dir mal GetAsyncKeyState an ->
![]() |
Re: Bewegungen in Welten
Warum nimmst du dafür Systemweite Hotkeys? Die Ereignis für die Form OnKeyDown und OnKeyPress reichen doch vollkommen.
|
Re: Bewegungen in Welten
Ja gut das läuft jetzt flüssiger aber wie kriege ich das hin, dass der den Charkter nur bewegt wenn das Formular im Vordergrund ist?
Habs mit Focus ausprobiert, aber das klappt nicht. |
Re: Bewegungen in Welten
Die tasten werden doch nur ausgewertet, wenn das Formular den Focus hat. Anders darf es gar nicht funktionieren.
|
Re: Bewegungen in Welten
Liste der Anhänge anzeigen (Anzahl: 1)
Ne der bewegt sich auch wenn das Formular nicht den Focus hat.
Probier es selbst aus. Ich häng die aktualisierte Version an. |
Re: Bewegungen in Welten
Benutzt du noch die systemweiten Hotkeys?
BTW ohne Quellcode nützt uns das nichts. |
Re: Bewegungen in Welten
Ok habs gerade hingekriegt mit Form.Active
Aber hier mal der Code:
Delphi-Quellcode:
Und hier noch eine der funktionen zum laufen:
procedure TGame.Timer2Timer(Sender: TObject);
begin if Game.Active=true then begin If GetAsyncKeyState(Ord('W')) < 0 Then Begin if Image11.Top>1 then begin Stepup; end; End; If GetAsyncKeyState(Ord('A')) < 0 Then Begin if Image11.left>1 then begin Stepleft; end; End; If GetAsyncKeyState(Ord('S')) < 0 Then Begin if Image11.top<350 then begin Stepdown; end; End; If GetAsyncKeyState(Ord('D')) < 0 Then Begin if Image11.left<350 then begin Stepright; end; End; end; end;
Delphi-Quellcode:
procedure TGame.Stepup();
begin if Bewegung=false then begin Bewegung:=true; Image11.Picture:=Image4.Picture; Image11.Top:=Image11.Top-10; delay(100); Image11.Picture:=Image4.Picture; Image11.Top:=Image11.Top-10; delay(100); Image11.Picture:=Image8.Picture; Image11.Top:=Image11.Top-10; delay(100); Image11.Picture:=Image4.Picture; Image11.Top:=Image11.Top-10; Bewegung:=false; end; end; |
Re: Bewegungen in Welten
Zitat:
|
Re: Bewegungen in Welten
Und nochwas. Das hier:
Delphi-Quellcode:
macht man so:
if Bewegung=false then ...
Delphi-Quellcode:
Und das hier:
if not Bewegung then ...
Delphi-Quellcode:
sollte man so machen:
if Game.Active=true then ...
Delphi-Quellcode:
(Ich bekomme immer Augenkrebs, wenn ich sowas sehe :angel2:)
if Game.Active then ...
Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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