Mehrere Tasten gleichzeitig einlesen

Hallo liebe Experten,

momentan bin ich dabei, unter Visual Basic 6 ein kleines Arcadespiel fuer zwei Spieler zu programmieren. Zur Steuerung verwendet einer der beiden Spieler die Pfeiltasten, der andere die Tasten WASD. Ausserdem sind fuer jeden der beiden Spieler noch je eine Feuertaste eingeplant.

Probeweise habe ich jetzt ein kleines Testspiel geschrieben, bei dem ein kleines Rechteck einfach mit den Tasten nach oben, unten, links und rechts bewegt werden kann. Jedoch stehe ich vor einem alten Problem: Ich kann z.B. mein Rechteck nicht gleichzeitig nach oben bewegen und dann irgendwann auf die Feuertaste druecken. Denn in dem Moment bleibt mein Rechteck stehen, der Befehl zu feuern wird ausgefuehrt, aber der Befehl „nach oben“ wird nicht mehr erkannt.

Daher meine Frage an Euch: Wie schaffe ich es, dass mehrere Tasten gleichzeitig gedrueckt werden koennen, und dann auch mehrere Befehle gleichzeitig ausgefuehrt werden?

Mein Gedankenansatz waere, die Sache ueber Polling, sprich staendige Abfrage des Keyboards zu verwirklichen. Aber da weiss ich auch nicht, wie man es macht.

Ich wuerde mich ueber Vorschlaege (oder auch konkrete Quelltexte) sehr freuen! :smile:

Viele Gruesse,

Bernhard Kraemer

Einfachste Möglichkeit…
Nimm als Feuertaste eine der Tasten Shift, Strg, Alt, AltGR, diese kannst du gleichzeitig abfragen, und gleichzeitig nach rechts und links will ja keiner :wink:

Für den Mehrrest kann ich dir nicht helfen, früher in Pascal/ASM ging das so einfach, aber heute…

(Wobei VB auch bestimmt nicht DIE Sprache der Wahl für Spiele ist :wink:

Ralph

Geht leider nicht…
Hallo Ralph und alle anderen,

Dein Vorschlag ist zwar sehr gut, wenn nur ein Spieler spielt. Aber da es sich um ein 2-Spieler-Arcadespiel handelt, werden teilweise wohl bis zu 4 Tasten gleichzeitig gedrückt: Spieler 1 läuft und feuert UND Spieler 2 läuft und feuert.
Problem also nicht gelöst.

Viele Grüße

Bernhard

P.S.: Kurze Frage: Wie hat man das denn unter Pascal gemacht (Vom Prinzip her)? Damals hatte ich einmal etwas ähnliches unter Pascal machen wollen, bin dann aber auch an diesem Problem gescheitert

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Ralph und alle anderen,

Problem also nicht gelöst.

Probiers doch mal mit APIs. Ich habs zwar mangels VB nicht testen können, aber sollte es nicht mit der GetAsyncKeState -API gehen? Ich werd das ganze mal testen und sag dir dann Bescheid.

Der Doc!