Einzelnen Beitrag anzeigen

ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#4

Re: Problemme mit FormKeyDown

  Alt 3. Jan 2006, 16:50
Hallo,

also ich habe das alles jetzt doch mit einen Timer gemacht und es geht.....

die Procedure mit der ich mein Schiff bewege schaut nun so aus:

Delphi-Quellcode:
procedure TForm2.timer_schiffTimer(Sender: TObject);
begin
  // Bewegen
  if (GetAsyncKeyState(VK_UP) <> 0) and (img_schiff.top>20) then img_schiff.Top:=img_schiff.Top-ges;
  if (GetAsyncKeyState(VK_DOWN) <> 0) and (img_schiff.top<600) then img_schiff.Top:=img_schiff.Top+ges;
  if (GetAsyncKeyState(VK_LEFT) <> 0) and (img_schiff.left>20) then img_schiff.Left:=img_schiff.Left-ges;
  if (GetAsyncKeyState(VK_RIGHT) <> 0) and (img_schiff.left<950) then img_schiff.Left:=img_schiff.Left+ges;
end;

Das Schießen konnte ich nicht auch in den Timer nehmen, der Grund: Wenn der Anwender einmal kurz auf die Taste drückt werden gleich 5-1 Schüsse ausgelößt. (Weil das Intervall des Timers so klein ist, aber das muss so klein sein um das Schiff zu bewegen)

Deshalb habe ich jetzt den Schuss in das FormKeyDown Ereigniss geschrieben

Delphi-Quellcode:
procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  // Schießen
  if key=VK_SPACE then new_schuss;
end;
Wenn ich eine Pfeiltaste gedrückt halte und auf die Leertaste drücke dann funktioniert alles so wie ich will: Das Raumschiff bewegt sich und schießt gleichzeitiig.

Wenn ich zwei Pfeiltasten drücke dann bewegt sich das Raumschiff schräg.

Jetzt das komische an der Sache: Halte ich zwei Pfeiltasten gedrückt und drücke die Leertaste dann wird die Procedure new_schuss nur manchmal ausgelößt und zwar nur wenn ich die Obere und Rechte Pfeiltaste oder die Untere und Linke Pfeiltaste gedrückt halte.

Wenn ich aber die Obere und Linke Pfeiltaste oder die Untere und die Rechte gedrückt halte und dann die Leertaste drücke dann wird new_schuss nicht ausgelößt... kann mir das wer erklären?
FormKEyDown wird beim drücken der Leertaste ausgelößt, das habe ich schon ausproiert, aber key=VK_SPACE geht nicht.....

Ich bin Ratlos....



Ferby
  Mit Zitat antworten Zitat