Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Input für Spiele? (https://www.delphipraxis.net/145805-input-fuer-spiele.html)

SonicTTH 8. Jan 2010 17:15


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

Teekeks 8. Jan 2010 17:19

Re: Input für Spiele?
 
Ich werfe mal GetAsyncKeyState in den Raum...

Namenloser 8. Jan 2010 18:05

Re: Input für Spiele?
 
Zitat:

Zitat von SonicTTH
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?

Wahrscheinlich gar nicht, denn das klingt nach einer Hardware-Limitation. Siehe auch Rollover

SonicTTH 9. Jan 2010 12:34

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.

SonicTTH 10. Jan 2010 19:19

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:
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 5 letzten tasten sind W, A, S, D und Q.
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.

Looper 10. Jan 2010 22:23

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

Medium 10. Jan 2010 22:33

Re: Input für Spiele?
 
NamenLozer hat das Problem doch schon beschrieben - ihm darf spätestens jetzt auch ruhig Glauben geschenkt werden :roll:

SonicTTH 10. Jan 2010 23:09

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.

Namenloser 10. Jan 2010 23:17

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.

Medium 11. Jan 2010 02:01

Re: Input für Spiele?
 
Zitat:

Zitat von SonicTTH
Nein, das glaube ich nicht

Du hast dem verlikten Artikel genau 0 Aufmerksamkeit geschenkt oder? Ich hab nichtmal das Problem, wusste aber auch erst nach dieser Lektüre, dass z.B. Funktions- und Sonder- sowie Umschalttasten einer anderen bzw. keiner Limitierung unterliegen, und dass es da teils große Unterschiede zwischen Tastaturen gibt. So ein Link ist nicht geposted worden damit die Schrift schön blau ist...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 Uhr.
Seite 1 von 2  1 2      

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