Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bewegungen in Welten (https://www.delphipraxis.net/116691-bewegungen-welten.html)

XXcD 4. Jul 2008 12:08


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?

nuclearping 4. Jul 2008 12:10

Re: Bewegungen in Welten
 
Schau dir mal GetAsyncKeyState an -> http://msdn.microsoft.com/en-us/library/ms646293.aspx

Luckie 4. Jul 2008 12:59

Re: Bewegungen in Welten
 
Warum nimmst du dafür Systemweite Hotkeys? Die Ereignis für die Form OnKeyDown und OnKeyPress reichen doch vollkommen.

XXcD 4. Jul 2008 13:11

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.

Luckie 4. Jul 2008 13:14

Re: Bewegungen in Welten
 
Die tasten werden doch nur ausgewertet, wenn das Formular den Focus hat. Anders darf es gar nicht funktionieren.

XXcD 4. Jul 2008 13:33

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.

Luckie 4. Jul 2008 13:38

Re: Bewegungen in Welten
 
Benutzt du noch die systemweiten Hotkeys?

BTW ohne Quellcode nützt uns das nichts.

XXcD 4. Jul 2008 14:17

Re: Bewegungen in Welten
 
Ok habs gerade hingekriegt mit Form.Active

Aber hier mal der Code:

Delphi-Quellcode:
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;
Und hier noch eine der funktionen zum laufen:
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;

Cyf 4. Jul 2008 14:55

Re: Bewegungen in Welten
 
Zitat:

Die Ereignis für die Form OnKeyDown und OnKeyPress reichen doch vollkommen.
Wäre hier imho besser.

CK_CK 4. Jul 2008 15:20

Re: Bewegungen in Welten
 
Und nochwas. Das hier:
Delphi-Quellcode:
if Bewegung=false then ...
macht man so:
Delphi-Quellcode:
if not Bewegung then ...
Und das hier:
Delphi-Quellcode:
if Game.Active=true then ...
sollte man so machen:
Delphi-Quellcode:
if Game.Active then ...
(Ich bekomme immer Augenkrebs, wenn ich sowas sehe :angel2:)

Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 Uhr.
Seite 1 von 2  1 2      

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