Autor |
Beitrag |
Lernenochdazu
      
Beiträge: 23
|
Verfasst: Mo 11.07.22 07:58
Guten Tag,
Ich habe eingestellt, dass ich mit w und s, sowie up und down ein shape bewegen kann. Allerdings kann ich beide shapes, wenn ich z.B w und down drücke, nicht zusammen bewegen. Nur abwechselnd. Welche Möglichkeiten habe ich, damit beides gleichzeitig geht?
LG
Moderiert von Th69: Titel leicht geändert (war "Mehrere Objekte aufeinmal, mit verschiedenen Tastenkombinati").Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Di 12.07.2022 um 07:46
|
|
jaenicke
      
Beiträge: 19172
Erhaltene Danke: 1713
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 11.07.22 08:00
An der Stelle, an der du das eine Shape bewegst, kannst du doch auch das andere mit bewegen.
Ohne zu wissen wie du das machst, kann ich aber nichts Genaueres dazu sagen.
|
|
Lernenochdazu 
      
Beiträge: 23
|
Verfasst: Mo 11.07.22 08:13
|
|
Th69
      

Beiträge: 4714
Erhaltene Danke: 1031
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 11.07.22 09:10
Das ist mit den KeyDown/Char/Up-Methoden nicht möglich, da immer nur ein Zeichen (die zuletzt gedrückte Taste) weitergeleitet wird (kannst du auch in jeder TextBox, hier im Forum oder mit Notepad u.a., nachvollziehen).
Die WinAPI bietet aber die Funktion GetAsyncKeyState an, um den aktuellen Tastenstatus (Up oder Down) jeder einzelnen Taste zu ermitteln. Dazu solltest du dann stattdessen einen Timer verwenden, der die Tasten regelmäßig abfragt.
Zum Abfragen auf "down"-Status muß dazu dann das letzte Bit abgefragt werden:
Delphi-Quelltext 1:
| if (GetAsyncKeyState(key) AND $8000) <> 0 then |
Edited: & -> AND
Zuletzt bearbeitet von Th69 am Di 12.07.22 08:51, insgesamt 2-mal bearbeitet
Für diesen Beitrag haben gedankt: Andreas_500, Lernenochdazu
|
|
jaenicke
      
Beiträge: 19172
Erhaltene Danke: 1713
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 11.07.22 11:17
Lernenochdazu hat folgendes geschrieben : | Allerdings kann ich beide shapes, wenn ich z.B w und down drücke, nicht zusammen bewegen. Nur abwechselnd. Welche Möglichkeiten habe ich, damit beides gleichzeitig geht?
[..]
Das andere Shape soll aber mit anderen Tastenkombinationen bewegt werden. Nicht mit den gleichen. |
Moment, was denn nun? Zusammen bewegen oder einzeln je nach gedrückter Taste? Kannst du bitte noch einmal schreiben, wie du das meinst?
Du kannst z.B. im Parameter Shift abfragen, ob Strg, Shift, usw. gedrückt sind, wenn du z.B. mit Strg + W das andere Shape bewegen möchtest. Wenn es ganz andere Tasten sein sollen, brauchst du ja nur auf diese zu prüfen.
Aber aktuell ist mir nicht ganz klar, was du genau machen möchtest.
|
|
Gausi
      
Beiträge: 8522
Erhaltene Danke: 461
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mo 11.07.22 11:28
jaenicke hat folgendes geschrieben : | Aber aktuell ist mir nicht ganz klar, was du genau machen möchtest. |
Ich tippe auf etwas wie einen Pong-Klon für zwei Spieler. Der erste Spieler nutzt WASD zur Steuerung, der zweite die Pfeiltasten. Dabei sollen beide Spieler gleichzeitig steuern können.
Ich würde da auch mit GetAsyncKeyState ansetzen, wie Th69 beschrieben hat.
_________________ We are, we were and will not be.
|
|
Lernenochdazu 
      
Beiträge: 23
|
Verfasst: Di 12.07.22 08:25
|
|
Gausi
      
Beiträge: 8522
Erhaltene Danke: 461
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 12.07.22 08:49
Lernenochdazu hat folgendes geschrieben : | Allerdings brauch es sehr lange bis die beiden Shapes ihre Position updaten, was kann ich dagegen tun? Und wofür steht das & $8000? Wird bei mir nicht gefunden. |
Probier mal
Delphi-Quelltext 1:
| if (GetAsyncKeyState(key) AND $8000) <> 0 then |
Dabei wird ein bestimmtes Bit des Rückgabewertes von GetAsyncKeyState überprüft. Der binäre UND-Operator ist in Delphi AND, nicht &
Wie lange dauert es denn, bis sich die Shapes updaten? Hast du das Timer-Intervall vom Standard 1000ms auf einen kleineren Wert gesetzt? 25-50ms würde ich hier ansetzen - zu kleine Intervalle bringen nämlich auch nichts.
_________________ We are, we were and will not be.
|
|
Th69
      

Beiträge: 4714
Erhaltene Danke: 1031
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 12.07.22 08:57
Genau, ich hatte mich mit C++ bzw. C# vertan.
Zum Neuzeichnen der Shapes (nach der Positionsveränderung) Invalidate oder Refresh aufrufen.
|
|
|