![]() |
Input für Spiele?
Hallo,
Ich programmiere derweil einen Bomberman clon mit Andorra 2D. Mir ist aufgefallen dass es beim Spielen mit mehreren Spielern (es werden durchschnittlich mehr als 4 oder 5 tasten gedrückt) dazu kommt dass einige befehle nicht ankommen. Wie kann man das umgehen? Danke, Sonic |
Re: Input für Spiele?
Ich werfe mal GetAsyncKeyState in den Raum...
|
Re: Input für Spiele?
Zitat:
![]() |
Re: Input für Spiele?
@ NamenLozer: Das glaube ich nicht denn bei anderen spielen geht das, hab ich schon oft gesehen.
@ Teekeks: Vielen Dank, das hilft mir weiter. Ich werde mehr darüber in erfahrung bringen und nach erfolgreicher anwendung meine Ergebnisse hier zur verfügung stellen. |
Re: Input für Spiele?
Also, ich hab jetzt mal etwas mit der Funktion GetAsyncKeyState ausprobiert und zum test schnell ein programm gemacht das nur einen timer enthält der alle 30ms folgende prozedur aufruft (ME ist ein memo):
Delphi-Quellcode:
Die 5 letzten tasten sind W, A, S, D und Q.
procedure TForm1.Timer1Timer(Sender: TObject);
begin ME.Lines[0] := IntToStr(GetAsyncKeyState(VK_LEFT)) ; ME.Lines[1] := IntToStr(GetAsyncKeyState(VK_RIGHT)) ; ME.Lines[2] := IntToStr(GetAsyncKeyState(VK_UP)) ; ME.Lines[3] := IntToStr(GetAsyncKeyState(VK_DOWN)) ; ME.Lines[4] := IntToStr(GetAsyncKeyState(VK_Space)) ; ME.Lines[5] := IntToStr(GetAsyncKeyState($44)) ; ME.Lines[6] := IntToStr(GetAsyncKeyState($41)) ; ME.Lines[7] := IntToStr(GetAsyncKeyState($53)) ; ME.Lines[8] := IntToStr(GetAsyncKeyState($57)) ; ME.Lines[9] := IntToStr(GetAsyncKeyState($51)) ; end; Die Ausgabe sieht (höchstens!) Wie folgt aus (Auch wenn ich alle abgefragten tasten gleichzeitig drücke): 0 -32768 0 -32768 0 -32768 0 -32768 -32768 -32768 Also maximal 6 tasten, wenns gut klappt, manche reihenfolgen bringen aber auch noch weniger tasten die gedrückt werden zum ergebnis. |
Re: Input für Spiele?
Wenn ich jetzt Mist erzähle berichtigt mich^^, aber ich glaube der Tastaturpuffer ist dann überlastet (ich kenne kein spiel bei dem man mehr als mehr als 6 Tasten drücken kann)
schönen Abend und gute Nacht :D |
Re: Input für Spiele?
NamenLozer hat das Problem doch schon beschrieben - ihm darf spätestens jetzt auch ruhig Glauben geschenkt werden :roll:
|
Re: Input für Spiele?
Nein, das glaube ich nicht, was NamenLozer geschrieben hat. Wenn ich z.b. Noch ein paar F* tasten dazu nehmen dann kann da der tastendruck in bestimmten bereichen auch gleichzeitig mit 6 anderen tasten ausgelesen werden, sodass es schon 9 verschiedene gleichzeitig sind. Mag sein dass das irgendwann knapp wird aber ich denke zumindest 3 spieler sollten bei einem kleineren spiel wie meinem bomberman clon hier gleichzeitig an einer tastatur spielen können.
|
Re: Input für Spiele?
Das hängt stark von der Tastatur und den Tastenkombinationen ab. Viele Tastaturen vertragen im Schnitt nur 3 gleichzeitige Tastendrücke, und selbst hochwertige Modelle oft nur bis zu ca. 6. Nur Steuerungstasten wie Shift, Control, Pfeiltasten usw. sind meistens so gelegt, dass sie alle gleichzeitig gedrückt werden können. Außerdem sind die möglichen Tastenkombinationen nicht bei jeder Tastatur gleich - ich kann z.B. Frets on Fire in der Standardkonfiguration nicht spielen, weil die Tasten F1 - F4 bei mir sofort blockieren. Also bau auf jeden Fall eine Möglichkeit ein, dass der Spieler die Tasten umkonfigurieren kann.
|
Re: Input für Spiele?
Zitat:
|
Re: Input für Spiele?
Schön Blau hat aber auch was :)
aber im ernst, genau das ist dein problem, die Tasten der Tastaturen sind verkettet in Spalten, und es werden die tasten Spalte für Spalte abgefragt, dabei können je nach eingesetzten tastaturprozessor (früher war das sogar ein Intel 80x86) verschieden viele tasten gleichzeitig abfragen, und auch entsprechend unterschiedlich je nach Reihe und Spalte in der sich diese befinden. werden zufällig viele Tasten in den gleichen ketten gleichzeitig gedrückt, werden diese nicht mehr korrekt ausgelesen. Mann geht bei der Konstruktion von tastaturen einfach davon aus das der Mensch nur 10 Finger an 2 Händen hat. 30 Finger gleichzeitig auf der Tastatur sind halt sehr ungewöhnlich :) Bei vielen Spielen werden deswegen nur max 2 Spieler an der Tastatur erlaubt, der dritte schnappt sich die Maus und der Vierte nen Joystick und schon geht das :) Gruß Matthias |
Re: Input für Spiele?
@ Medium: Nicht direkt, der post war mir nur zu unfreundlich, daher habe ich mir das erst später angesehen. Und völlig korrekt war seine aussage auch nicht. Denn nach dem artikel kann mein vorhaben durchaus funktionieren, nur würde das denn vermehrt zu hardwareabhängigkeit führen und sowas finde ich natürlich nicht gut und muss also alternativen anbieten.
@ matashen: Das war mal eine Freundliche und gute antwort! Danke schön! Zitat:
Na gut, dann war das eine lehre die ich aus dem ehrgeizigen projekt gezogen habe 5 leute gleichzeitig an einer tastatur zu haben. Ist das denn eurer meinung nach ok die Delphix komponenten (z.b. DxInput) zu verwenden um die Eingabe von Joystick / Gamepads etc zu realisieren, oder gibt es da eine aktuellere / bessere möglichkeit? |
Re: Input für Spiele?
Bau doch lieber eine Netzwerk-Fassung.
Eine richtig gute fehlt da noch. Wenn du es gut anstellst, könnte dein Spiel auf Lan-Parties ein großer Erfolg werden (wie dieses Blob-Beachball). Über Internet spielbar wäre natürlich auch von Vorteil. |
Re: Input für Spiele?
Joa, damit werde ich mich auch befassen wenn das Spiel soweit steht.
Aber bomberman zu zocken an einem rechner hat mir früher auch schon viel spaß gemacht, das sollte auch mit mehreren spielern an einem rechner gehen. |
Re: Input für Spiele?
Ich würde delphix und Direct-Input nehmen und mehrere Joysticks zulassen.
Dann wirds auch was mit nem fünfer Game. Netzwerk ist auch gut, aber wenn ein paar Kumpels schnell mal auf ein Guitar Hero vorbei kommen wär ne runde Bomberman schon klasse ohne das jeder seine Rechner aufbauen muss - so viel Tische hab ich nicht :) |
Re: Input für Spiele?
Zitat:
Zitat:
Aber bitte, wenn du dir nicht helfen lassen willst und weiterhin gutgemeinte Ratschläge mit "Das glaube ich aber nicht" oder "Das ist mir zu unfreundlich" abstempelst - dein Problem. |
Re: Input für Spiele?
Mittlerweile bin ich mit meinem Spiel soweit dass ich nun endlich auch controller abfragen möchte. Mit DXInput geht das bei der tastatur ganz gut, allerdings mit einem joystick nicht so leicht. Zunächst einmal ist bei jedem getesteten joystick "isleft" eingeschaltet und keine der tasten auf dem controller bewirkt irgendeine veränderung bei den "isbuttonXX" states.
Ich suche hier schon seit ner weile nach einem richtigen tutorial zu DXInput, finde aber nirgends wirklich was das mir hilft. Ich hoffe aber ihr könnt das... |
Re: Input für Spiele?
Hallo,
Ich verwende jetzt (zum test) mehrere DXInput Komponenten; Für jeden spieler eine. Scheinbar sind die States isUp, isDown, isLeft und isRight IMMER mit den Pfeiltasten assoziiert, selbst wenn man sie über DXInput1.Keyboard.KeyAssigns[isup,0]:= XXX Einer anderen taste zuordnet! Dadurch werden senn ich z.b. für den ersten spieler die pfeiltasten zum navigieren festlege, alle anderen spieler auch durch diese gesteuert UND durch die ihnen zugeordneten tasten. Was kann man da machen? Habt ihr vielleicht nen besseren vorschlag was die zuordnung an tasten für jeden über ein extra DXInput angeht? Die dokumentation für die DelphiX Komponenten ist extrem dürftig. Ansonsten hätte ich die lösung für meine probleme schon längst... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz