Entwickler-Ecke
Multimedia / Grafik - Wirklich DXInput bei DelphiX-Spielen verwenden?
Da_Knuddelbaer - Mi 23.04.03 10:00
Titel: Wirklich DXInput bei DelphiX-Spielen verwenden?
Hi all,
ich habe folgendes Problem:
Ich habe ein Multiplayer-Spiel auf DelphiX-Basis programmiert und dabei jetzt auch die DXInput verwendet. Das Problem ist jetzt aber dass ich erstens Schwierigkeiten bei der Tastaturbelegung (wenn ein Spieler seine Tasten anders belegen will) und im Spiel selber habe. Im SPiel selber habe ich insofern Probleme dass beispielsweise Tastatureingaben nicht beachtet werden oder er zu viele gleichzeitige Eingaben hat die dann bei meiner sensiblen Tastatur dazu führen dass sich ein Befehl (beispielsweise nach links gehen) "festhakt". Zur Zeit verwende ich für 4 Spieler 4 verschiedene DXInputs.
Wie kann man das bei DXInput verhindern bzw. sollte/könnte ich vielleicht eine andere Komponente für die Bewegungen verwenden?
Ich hoffe ihr könnt mir da weiterhelfen!
MfG,
Knuddelbaer
maximus - Mi 23.04.03 11:21
| Zitat: |
| Zur Zeit verwende ich für 4 Spieler 4 verschiedene DXInputs |
Könnte der grund sein! Willst du mit 4 spielern gleichzeitig auf der tastatur spielen...das ist IMHO unmöglich. Normale Tatsaturen haben einen sehr kleinen puffer, dh. bei max. 6 tasten gleichzeitig ist schluss(ausser bei echten USB tastaturen). ggt. joysticks dazunehmen! oder alles über eine DXInput compo machen(vier ist verschwendung).
grüsse...
Da_Knuddelbaer - Mi 23.04.03 14:36
Das habe ich mir auch überlegt, dass 4 DXInputs verschwendung sind. Nur habe ich, wenn ich eine verwende, das Problem dass ich bei den Bewegungen der einzelnen Spieler nicht mehr klarkomme. Schließlich überprüfe ich ja "nur" ob beispielsweise in DXIpnut1.States ein isUp ist, wie belege ich es auf DXInput.States von Belegung 2 oder 3?
Eine meiner alten Tastatur aus meinem Arsenal scheint mehr als 6 Tasten gleichzeitig verarbeiten zu können weil mit ihr dieser Effekt nicht auftritt. Erst wenn alle gleichzeitig so ziemlich alle 4 Bewegungstasten drücken kommt kurz ein piep und trotzdem läuft alles noch wie gewohnt, war dann halt nur ein kleienr ruckler drin...
Und glaub mir, 4 an einer Tastatur ist möglich, ich habs getestet :lol: Man braucht halt nur einiges an Spielraum im Zimmer. Joystick will ich den Spielern nicht zumuten, damit kann man 2D-Spiele nicht gut spielen. Bei einem Flugsimulator wärs was anderes.... aber 2D??? Und Maus sowieso nicht, die sollte man dann auch für anderes verwenden können.
Ich mein das mit 4 Spielern an einer Tastatur ist ja auch nur eine Ausnahme, da das Spiel netzwerkfähig ist bzw. sein wird.
Thx für die Antwort,
Knuddelbaer
maximus - Mi 23.04.03 16:35
Jo...
zu den InputStates: du könntest einfach den enum-typ anpassen. in der unit DXInput is der typ TDXInputState deklariert! Da dann einfach ganzen Buttons anders benennen. zB:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| { TCustomInput }
TDXInputState = (isUp, isDown, isLeft, isRight, isShooting, isUp2, isDown2, isLeft2, isRight2, isShoot2, isButton7, isButton8, isButton9, isButton10, isButton11, isButton12, isButton13, isButton14, isButton15, isButton16, isButton17, isButton18, isButton19, isButton20, isButton21, isButton22, isButton23, isButton24, isButton25, isButton26, isButton27, isButton28, isButton29, isButton30, isButton31, isButton32); |
:wink: Falls das nicht deinem code zuwider läuft!?
Das deine alte tastatur mehr als 6 tasten kann is ja waahnsinn...warscheinlich aber auch nicht viel mehr?
hoffe konnte helfen
Da_Knuddelbaer - Mi 23.04.03 16:42
Nein das beisst sich nicht mit meinem code... deine lösung scheint mir nur was umständlich. Man wird doch wohl irgendwie auf die depperts zweitbelegung zugreifen können, oder???
Und nein, ich bezweifle das die Tastatur arg viel mehr puffer hat als die neueren, aber dafür hat sie bei einem überlauf keine fehler :wink: Da bringt auch diese komische Ironie nichts...
Aber auf jeden Fall Thx für die Hilfe! Wenigstens einer der überhaupt hilft.
maximus - Mi 23.04.03 17:57
Es tut mir so leid, dass ich ironisch war *oh sche**** ich tu's schon wieder*...
Zum thema: Diese routine...
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TKeyboard.Update; ... for i:=LOW(TDXInputState) to HIGH(TDXInputState) do begin for j:=0 to 2 do if Keys[KeyAssigns[i, j]] then begin FStates := FStates + [i]; Break; end; end; ... |
ist fürs füllen der KeyStates zuständig. In 'KeyAssigns' sind die drei konfigurationen drinn. Wenn du jetzt für jede konfiguration ein eigenes State property anlegt( oder ein 'FStateArray') und in dieses füllst, dann hast du seperaten zugriff auf die konfigurationen :D Problem ist nur, der prob-editor von DXInput lässt nur drei zu.
..musst halt abwägen, ob das der mühe wert ist..!?
Da_Knuddelbaer - Mi 23.04.03 18:23
Natürlich, eine Verbesserung ist die Mühe imemr wert... gut also mal schaun obs funzt.
Thx.
Da_Knuddelbaer - Mi 23.04.03 18:40
Trotzalledem scheint es irgendwie nicht zu gehen. Mir fehlt einfach der State aus den KeyAssigns...
maximus - Do 24.04.03 10:02
Hää...
vielleicht könntest du etwas präziser werden und die update routine posten?
mimi - Fr 25.04.03 23:08
| Zitat: |
das ist IMHO unmöglich. Normale Tatsaturen haben einen sehr kleinen puffer
|
das Stimmt nicht, schaut euch mal Clonk(
http://www.clonk.de) an....
zu deinem Problem Da_Knuddelbaer: also ich würde es so machen:
du nimmst ein array beispiel
Quelltext
1: 2:
| var keys[0..256] of Bool; |
und anschließet packst du bei onKeyDown:
keys[key]:=True;
und bei onKeyUp
keys[key]:=False;
jetzt kenne ich denn aufbau deines Spieles nicht, aber du musst jetzt ambesten noch eine funktion schreibe mit der du die Tasten abfragst z.b.
CheckKey(key);
und in der schreibst du dann
Quelltext
1: 2:
| if keys[key] = VK_LEFT then.... und so weiter |
das könnte auch dein problem mit der Tasterturänderung lösen ;)
[/code]
Da_Knuddelbaer - Sa 26.04.03 08:42
Hey vielen Dank.
Ich programmiere objektorientiert. Wie im klassischen Sprite-Beispiel von DelphiX verwende ich beispielsweise ein TPlayersprite welcher unter anderem auch eine DoMove-Procedur hat. In dieser Prozedur erledige ich das ganze Plimbim mit den Bewegungen.
Wenn ichs richtig verstehe Frage ich also einfach nur den Key-Wert ab... die virtualKeys wie VK_left etc. sind ja lediglich Cursortasten und Alt und und so weiter. Buchstaben fallen da ja bekanntlich nicht mit rein. Die müsste ich jetzt selber per Ordinal abfragen? Oder könnte ich beispielsweise so "Buttons" erstellen wie es mit der DXInput gemacht wird um auf Left, Right etc. zuzugreifen zu können? :)
Thx,
Knuddelbaer
mimi - Sa 26.04.03 13:08
Ja die musst du jetzt selbst angeben z.b. so:
keys[ord(a)]:=True
z.b. ;)
| Zitat: |
Oder könnte ich beispielsweise so "Buttons" erstellen wie es mit der DXInput gemacht wird um auf Left, Right etc. zuzugreifen zu können?
|
das geht auch z.b. könntes du sagen, wurde jetzt die Tasten: Left und Up gedrückt soll Button1 auf True geschaltet werden... soll ich mal verzuchen so eine funktionin zu erstellen ?
oder willst du das machen ?
ansonsten teste ich es mal in meinem Neuen Spiel...
Was für ein Spiel schreibst du denn gerade ?
kannst mir ne version senden ?
(an:
mimi_171@gmx.de)
Da_Knuddelbaer - Sa 26.04.03 15:41
Sicher, ich schick dir die letzte Beta im Arsenal (weiter ist es bisher noch nicht). Wunder dich aber ja net über die Steuerung, die ist noch was klobig :oops:
TheNeon - Sa 26.04.03 15:50
| Da_Knuddelbaer hat folgendes geschrieben: |
| Sicher, ich schick dir die letzte Beta im Arsenal (weiter ist es bisher noch nicht). Wunder dich aber ja net über die Steuerung, die ist noch was klobig :oops: |
Tja, Knuddelbär, dann mach mal hin ..... die anderen wollen das Game bestimmt auch noch zocken ;) :beer: :dance: :wink2:
...... ich mein ich kenne es ja 8) , aber die anderen :D ...... die wollen ja auch mal ..... :wink: 8)
......... hmm, nur muss das erstmal mit der Steuerung und den Grafiken verbessert werden :wink: :wink: :mahn: :party:
Da_Knuddelbaer - Sa 26.04.03 16:03
Ja hack du doch auch noch drauf rum! :lol: tss!
Nur weil die Grafiken insgesamt mies aussehen heißt das ja nicht dass ich daran nicht noch was machen werde, wa?
TheNeon - Sa 26.04.03 16:11
| Da_Knuddelbaer hat folgendes geschrieben: |
Ja hack du doch auch noch drauf rum! :lol: tss!
Nur weil die Grafiken insgesamt sche**** aussehen heißt das ja nicht dass ich daran nicht noch was machen werde, wa? |
Hey, so ist das ja auch nicht gemeint. Ich finde so ein Game in einer so kurzen Zeit so weit zu bringen hat was. Du hast kurz vor mir, also kurz vorm 13.04., angefangen das Spiel zu proggen, und guck es dir mal an ...... hat schon Multiplayer, Skins, Sounds ....... und es läßt sich, bis auf paar kleine Macken, super spielen.
Das war keine dumme Anmache, sondern mehr eine Würdigung, eine Wertschätzung ...... sonst hätte ich den anderen niemals den Anreiz gegeben es sich demnächst mal zu holen
wenn es fertig ist. :wink:
Wer weiß, vielleicht veröffentlichen wir beide unsere Prog hier zeitgleich im Forum?! 8)
Also: mach weiter so! :wave:
Bye,
TheNeon ( aka Bug-Killer ;) )
Da_Knuddelbaer - Sa 26.04.03 16:14
Multiplayer... mehr oder weniger
Skins und Sounds auch mehr oder minder :D
und die kleineren Macken sind immerhin eine nicht hundertprozenitg funzende Steuerung :P
mimi - Sa 26.04.03 17:05
das mit der steuerungs bekommst du aber hin ;)
so schwer ist das auch wieder nicht....
Da_Knuddelbaer - Sa 26.04.03 18:44
hoff ich mal... wobei ich da jetzt mal optimistisch bin :)
[EDIT]
was jetzt aber nicht heissen soll dass ich bei sowas imemr schnell aufgebe! :lol:
mimi - Sa 26.04.03 19:45
Soll ich ein kleines Beispiel programm schreiben ?
zu diesem Thema ?
Da_Knuddelbaer - So 27.04.03 10:23
Wär' vielleicht ganz hilfreich, vor allem für testzwecke. Thx :)
mimi - So 27.04.03 18:37
kann ich ja heute ml machen ;)
maximus - Mo 28.04.03 10:36
:D Versteht mich nicht falsch...aber ein directX game über virtual-key-codes zu steuern ist IMHO unprofessionell. Wenn du mit den DXInput nicht klar kommst, dann mach es doch direkt via DirectInput. Is garnicht so kommpliziert, wie es sich anhört. Ich würd dir sogar meine implementation zu verfügung stellen (is noch nicht perfekt...erfüllt aber seinen zweck).
bis denn.
mimi - Mo 28.04.03 14:29
was meinst du mit DirectInput. ?
könntes mal ein beispiel machen ?
ich wollte ja auch noch eins machen;)
Da_Knuddelbaer - Mo 28.04.03 14:38
Sicher, ich bin für jede Meinung und jeden Tipp dankbar maximus.
Was Du genau mit DirectInput meinst weiss ich auch net aber ich denke einfach mal der direkte Zugriff auf DirectX Input, sprich keiner Kompo, wa?
Also Thx auf jeden Fall an euch beide!
Knuddelbaer
maximus - Mo 28.04.03 15:16
| Zitat: |
was meinst du mit DirectInput. ?
|
...DirectX besteht ja aus direct3D, directInput, directPlay, directSound, directMusic. Wobei directInput für externe eingaben zuständig ist...was ihr euch sicher schon gedacht habt :D dh. die compo DXInput (DelphiX input) ist DirectInput.
Ein beispiel könnt ich machen..dauert aber bis morgen, da ich das nicht auf der arbeit machen kann :wink:
maximus - Mo 28.04.03 22:25
So...jetzt gibbet ein beispiel.
http://www.eyer-systems.de/data/DIKcon.zip
Is recht simple, wenn man sich die richtige unit geschrieben hat. Könnt ja mal testen und fragen hier stellen. Viel spass...und würd mich interessieren ob ihr mehr als 6 tasten gleichzeitig angezeigt bekommt?
PS: wenn euch die D3D9 unit stört, könnt ihr alle enträge in DirectInput8.pas dazu auskommentieren.
Da_Knuddelbaer - Di 29.04.03 11:42
Danke, ich schaus mir direkt mal an.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!