Autor Beitrag
Da_Knuddelbaer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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:
ausblenden 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

_________________
mfg.
mâximôv
Da_Knuddelbaer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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...
ausblenden 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..!?

_________________
mfg.
mâximôv
Da_Knuddelbaer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: Mi 23.04.03 18:40 
Trotzalledem scheint es irgendwie nicht zu gehen. Mir fehlt einfach der State aus den KeyAssigns...
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ausblenden 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
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 26.04.03 19:45 
Soll ich ein kleines Beispiel programm schreiben ?
zu diesem Thema ?

_________________
MFG
Michael Springwald, "kann kein englisch...."