| Autor |
Beitrag |
Da_Knuddelbaer
      
Beiträge: 485
|
Verfasst: Mi 23.04.03 10:00
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
Zuletzt bearbeitet von Da_Knuddelbaer am Mi 23.04.03 16:19, insgesamt 1-mal bearbeitet
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: 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...
_________________ mfg.
mâximôv
|
|
Da_Knuddelbaer 
      
Beiträge: 485
|
Verfasst: 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  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
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: 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); |
 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
_________________ mfg.
mâximôv
|
|
Da_Knuddelbaer 
      
Beiträge: 485
|
Verfasst: 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  Da bringt auch diese komische Ironie nichts...
Aber auf jeden Fall Thx für die Hilfe! Wenigstens einer der überhaupt hilft.
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: 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  Problem ist nur, der prob-editor von DXInput lässt nur drei zu.
..musst halt abwägen, ob das der mühe wert ist..!?
_________________ mfg.
mâximôv
|
|
Da_Knuddelbaer 
      
Beiträge: 485
|
Verfasst: 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 
      
Beiträge: 485
|
Verfasst: Mi 23.04.03 18:40
Trotzalledem scheint es irgendwie nicht zu gehen. Mir fehlt einfach der State aus den KeyAssigns...
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Do 24.04.03 10:02
Hää...
vielleicht könntest du etwas präziser werden und die update routine posten?
_________________ mfg.
mâximôv
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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( 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]
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Da_Knuddelbaer 
      
Beiträge: 485
|
Verfasst: 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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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)
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Da_Knuddelbaer 
      
Beiträge: 485
|
Verfasst: 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 
|
|
TheNeon
      
Beiträge: 408
Windows
VS2010 C#
|
Verfasst: Sa 26.04.03 15:50
|
|
Da_Knuddelbaer 
      
Beiträge: 485
|
Verfasst: Sa 26.04.03 16:03
Ja hack du doch auch noch drauf rum!  tss!
Nur weil die Grafiken insgesamt mies aussehen heißt das ja nicht dass ich daran nicht noch was machen werde, wa?
|
|
TheNeon
      
Beiträge: 408
Windows
VS2010 C#
|
Verfasst: Sa 26.04.03 16:11
| Da_Knuddelbaer hat folgendes geschrieben: | Ja hack du doch auch noch drauf rum! 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.
Wer weiß, vielleicht veröffentlichen wir beide unsere Prog hier zeitgleich im Forum?!
Also: mach weiter so!
Bye,
TheNeon ( aka Bug-Killer  )
|
|
Da_Knuddelbaer 
      
Beiträge: 485
|
Verfasst: Sa 26.04.03 16:14
Multiplayer... mehr oder weniger
Skins und Sounds auch mehr oder minder
und die kleineren Macken sind immerhin eine nicht hundertprozenitg funzende Steuerung 
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 26.04.03 17:05
das mit der steuerungs bekommst du aber hin
so schwer ist das auch wieder nicht....
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Da_Knuddelbaer 
      
Beiträge: 485
|
Verfasst: 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! 
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 26.04.03 19:45
Soll ich ein kleines Beispiel programm schreiben ?
zu diesem Thema ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|