Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#11

Re: Frage

  Alt 2. Nov 2006, 19:07
Also erst einmal muss ich sagen, dass dieser Code sehr unübersichtlich ist, und dass man ihn sehr einfach auf diese Größe kriegen kann:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
  if char (key) = 'Wthen
    movie1.Top:= movie1.Top -10;
  if char (key) = 'Sthen
    movie1.Top:= movie1.Top +10;
  if char (key) = 'Athen
    movie1.left:= movie1.left -10;
  if char (key) = 'Dthen
    movie1.left:= movie1.left +10;

  if key = VK_UP then
    movie2.Top:= movie2.Top -10;
  if key = vk_down then
    movie2.Top:= movie2.Top +10;
  if key = vk_left then
    movie2.left:= movie2.left -10;
  if key = vk_right then
    movie2.left:= movie2.left +10;
end;
So finde ich das schonmal viel übersichtlicher.

Und jetzt zu deinem Problem, dass du nicht mehrere Bewegungen auf einmal ausführen kannst.
1) Nimm dir einen Timer und setze ihn auf das Formular.
2) Nimm den gleichen Code wie oben, aber ersetzeif Char(key) = 'Wthen durch if getasynckeystate(ord('W')) < 0 then das wiederholst du für die anderen If-Abfragen nach dem gleichen Prinzip.
3) Jetzt setze das Intervall des Timers auf eine etwas höhere Geschwindigkeit, z.b. 50 ms.

Die Bewegung sollte so funktionieren.

Zum Thema Kollision:
http://www.dsdt.info/tipps/?id=416&search=rect

Dürfte genau das richtige für dich sein


@EWeiss: ich wusste gar nicht, dass man die Keys mit AND verknüpfen kann (und was gescheites dabei rauskommt) o.O
Das probier ich mal aus^^
  Mit Zitat antworten Zitat