2 Controller 1 PC

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

marcel_bohn

Betreff: 2 Controller 1 PC

BeitragFr, Mai 27, 2011 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten tag!

Ich hab hier mal ne Frage: kann man auf irgendeine weise 2 Controller an einen PC anschließen die dann parallel funktionieren?

ich glaub zwar nicht das das möglich ist aber vllt. kennt ihr ja ne lösung...

skey-z

BeitragFr, Mai 27, 2011 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum sollte es nicht möglich sein, du hast doch mehr als einen USB-Steckplatz oder?

Schau dir mal die Befehle in der Hilfe an, da musst du eigentlich immer einen Port angeben(ab0), also hat jeder Controller seinen eigenen port/id einfach die maximalanzahl durchgehen und prüfen, ob ein Controller angeschlossen ist.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

marcel_bohn

BeitragFr, Mai 27, 2011 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
das hab ich auch schon gelesen und habs getestet nur leider prüft mein pc nur den von windows bevorzugten controller und ignoriert alle anderen controller

skey-z

BeitragFr, Mai 27, 2011 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie sieht den dein Code aus, ich habe mir damals ein Sample geschrieben und es hat super funktioniert, außerdem wäre das Thema im Codebereich wohl besser aufgehoben, da man im Moment nicht sehen kann, welche BB Version du benutzt.

Ich schau gleich mal ob ich mein Sample noch finde

[Edit]
Ok habs doch auf meinen neuen Laptop mitgenommen.

Mit folgendem Code werden mein Sidewinder Digitalpad und mein Logitech Dual Action gleichzeitig erkannt, den dritten kann ich gerade nicht anschließen, da meine Maus auch einen USB-Platz blockiert.

Code: [AUSKLAPPEN]

Graphics 800, 600, 32, 2
SetBuffer BackBuffer()

Type joypad
   Field id
   Field art$
End Type

joy_anz = CountJoysticks()

Repeat

   Text 10, 10, "Anzahl Joysticks: " + joy_anz

   For j.joypad = Each joypad
   
      Text 10 + (j\id * 250), 50, "Joypad: " + j\id
     
      Text 10 + (j\id * 250), 70, "Joypad Type: " + j\art
     
      Text 10 + (j\id * 250), 100, "Joypad X: " + JoyX(j\id)
     
      Text 10 + (j\id * 250), 120, "Joypad X Dir: " + JoyXDir(j\id)
     
      Text 10 + (j\id * 250), 140, "Joypad Y: " + (-JoyY(j\id))
     
      Text 10 + (j\id * 250), 160, "Joypad Y Dir: " + JoyYDir(j\id)
     
      Text 10 + (j\id * 250), 180, "Joypad Z: " + JoyZ(j\id)
     
      Text 10 + (j\id * 250), 200, "Joypad U: " + JoyU(j\id)
     
      Text 10 + (j\id * 250), 220, "Joypad V: " + JoyV(j\id)
     
      Text 10 + (j\id * 250), 240, "Joypad Pitch: " + JoyPitch(j\id)
     
      Text 10 + (j\id * 250), 260, "Joypad Yaw: " + JoyYaw(j\id)
     
      Text 10 + (j\id * 250), 280, "Joypad Roll: " + JoyRoll(j\id)
     
      Text 10 + (j\id * 250), 300, "Joypad Hat: " + JoyHat(j\id)
     
      For i = 1 To 12
         
         Text 10 + (j\id * 250), 310 + (i * 20), "Joypad Knopf(" + i + "): " + JoyDown(i,j\id)
      Next
   Next

   Flip
   Cls
Until KeyHit(1)

End


Function CountJoysticks()
   
   Local joy_type
   Local index = 0
   
   Repeat
     
      joy_type = JoyType(index)
           
      If joy_type <> 0 Then
         
         j.joypad = New joypad
            j\id = index
           
            Select joy_type
               
               Case 1
                  j\art = "digital"
               Case 2
                  j\art = "analog"
            End Select
           
         index = index + 1
         
      EndIf
     
   Until joy_type = 0
   
   Return index
     
End Function
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

marcel_bohn

BeitragFr, Mai 27, 2011 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, also ich benutzte bmax und mein code sieht so aus

BlitzMax: [AUSKLAPPEN]

SetGraphicsDriver GLMax2DDriver ()
Graphics 640,480
Repeat
For i2 = 0 To 4
For i = 0 To 32
If JoyDown(i,i2) Print i
Next
Next
Forever




so und da gibt er nur an wenn ich mit controller 1 eine taste drücke, also i2 is für port

skey-z

BeitragFr, Mai 27, 2011 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir werden beide Joypads erkannt, habe deinen Code mal ein wenig umgeschrieben:
Code: [AUSKLAPPEN]

Repeat
For port = 0 To 4
   For button = 0 To 12
      If JoyHit(button, port) Then Print "Taste: " + button + "| Joypad:" + port
   Next
Next
Until KeyHit(KEY_ESCAPE)

End



schau dir einfach mal mein Beispiel an und es sollte kein Problem sein dieses in BMax um zu schreiben.

Wenn obiges Beispiel keinen zweiten Controller anzeigen, wird wohl etwas mit einem von deinen nicht in Ordnung sein.

Wobei es mir auch komisch vorkommt, dass mein digitale Sidewinder bei Knopfdruck gleichzeitig 0,2,3 und 4 ist, der analoge Logitech wird nur als 1 angezeigt.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

marcel_bohn

BeitragFr, Mai 27, 2011 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
ok anscheinend kann nur blitz 2d zwei controller unterscheiden, denn mein code funktioniert wunderbar in blitz 2d ... aber überhaupt nicht in blitzmax...

skey-z

BeitragFr, Mai 27, 2011 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie ich sagt, auch mit deinem Ursprungscode, zeigt er mir beide an, keine Ahnung woran es bei dir sonst liegen kann???
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

marcel_bohn

BeitragFr, Mai 27, 2011 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
benutzt du blitzmax?

achja und bei deinem code Printed er das:

Taste: 2| Joypad:3
Taste: 2| Joypad:2
Taste: 2| Joypad:4
Taste: 2| Joypad:0
Taste: 2| Joypad:0
Taste: 2| Joypad:3
Taste: 2| Joypad:2
Taste: 2| Joypad:0
Taste: 2| Joypad:4
Taste: 2| Joypad:2
Taste: 2| Joypad:1
Taste: 2| Joypad:0

obwohl immer nur der selbe controller und taste gedrückt wurde
  • Zuletzt bearbeitet von marcel_bohn am Sa, Mai 28, 2011 11:53, insgesamt einmal bearbeitet

skey-z

BeitragFr, Mai 27, 2011 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
So nochmal von Anfang, den Code den ich zuerst gepostet habe ist aus B3D und zeigt alles Korrekt an.

Dann habe ich deinen Code in BM geladen und er zeigt mir auch an, dass egal ob ich den digitalen oder analogen Controller drücke ein Tastendruck empfangen wurde.

Daraufhin habe ich deinen Code nur etwas optimiert und bei der Anzeige, den Controller eingefügt, der gerade gedrückt wurde, mein Analoger wird mit dem Port 1 auch korrekt dargestellt, nur bei meinem Digitalen werden mehrere Ports(0,2,3,4) hintereinander angezeigt, was mir komisch vorkommt.

Zudem bin ich auch gerade dabei mein Sample aus B3D auf BM zu portieren, wird aber wohl heute nichts mehr, da ich gleich weg muss.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

marcel_bohn

BeitragFr, Mai 27, 2011 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
me² schreib mir wenn du dein code optimiert hast(ich hab zwei analoge controler und es werden immer nur die tasten angezeigt von dem controler den ich als bevorzugt gewählt hab) vllt. is das auch ein windows xp problem

skey-z

BeitragFr, Mai 27, 2011 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe hier kein XP mehr drauf und habe auch keinen Controller als Bevorzug eingerichtet, mag auch sein, dass es daran liegt, das kann ich nicht testen.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

gameworx

BeitragSa, Mai 28, 2011 10:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte mir bei amazon vor ein paar Wochen einen USB Adapter bestellt, an dem ich zwei Playstation Controller anschließen kann. Der Adapter hat ca. 5 EUR gekostet und funktioniert wunderbar. Egal ob ich einen Emulator benutze (MAME o.ä.), Armed Assault II spiele (Auto fahren ist damit cool) oder in Blitz3D programmiere. Kann ich wirklich sehr empfehlen, wenn du bereits Playstation Controller besitzt.
AMD Athlon II X3 440 (3 GHz), 4GB Ram, ATI Radeon HD 5450, Win 7

marcel_bohn

BeitragSa, Mai 28, 2011 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
das wäre eventuell eine gute alternative, bloß ich muss halt sagen das es mich schon ein bisschen ankotzt, das mein Controller code in blitz2d funktioniert aber in bmax nicht ich versuchs gleich mal ein meinem bro seinem windows 7 und wenns da geht dann heul ich... Sad

marcel_bohn

BeitragSa, Mai 28, 2011 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok jetzt check ich gar nix mehr ich hab mich jetzt heut morgen nochmal an mein programm gesetzt und sinnlos daran rum geschrieben mit erfolg: Es funktioniert jetzt, auch wenn ich nich weiß warum das so funzt ich post den code mal hier hier mal

BlitzMax: [AUSKLAPPEN]


SetGraphicsDriver GLMax2DDriver ()
Graphics 640,480

Repeat

For i2 = 0 To 1
For i = 0 To 32
If JoyDown(i,i2)
Print "taste: "+i
Print "joypad: "+i2
EndIf
Next
Next

JoyCount()
Forever




schreib ich den Code wie gepostet, so funktioniert es ohne probleme aber sobald ich joycount() entferne funktioniert controller 2 nicht mehr und ich weiß net warum... Naja hauptsach es geht, Ich weiß jetzt auch übrigens warum er für einen controller mehrere Ports zuweißt! Blitzmax weißt dem controller einen port zu bsp.: controller 1 = Port0, controller 2 = Port1 und da nicht mehr controller vorhanden sind, weißt er controller 1 auch noch die restlichen ports zu (3 und 4). Wird nun der controller an Port 3 oder 4 abgefragt wird automatisch controller 1 abgefragt.

ich hoffe das ich es einigermaßen verständlich erklärt habe Very Happy und bedanke mich für eure mithilfe mein Problem zu lösen!

DaysShadow

BeitragSa, Mai 28, 2011 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Teste am besten noch, ob es reicht JoyCount einmal vor der Hauptschleife, also vor Repeat aufzurufen.
Dann bräuchtest du BlitzMax nicht jeden Frame die Anzahl der Joysticks und Gamepads ermitteln lassen.
Blessed is the mind too small for doubt

marcel_bohn

BeitragSa, Mai 28, 2011 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
jop, da hast du natürlich recht ^^ is ja unnötig das jedes mal zu wiederholen. Wenn es vor der schleife steht funktionierts auch
 

c64

BeitragMo, Mai 30, 2011 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,

würde mal behaupten/vermuten das JoyCount irgentwas Initialisiert was auf bestimmten Systemen notwendig ist bei der benutzung von mehreren Controllern und auf anderen Systemen je nach Konfiguration nicht von nöten ist! Allerdings würde ich es aufgrund meiner Vermutung immer einsetzen wenn ein Programm mehrere Controller unterstützen soll.

mfg. C64
Betreten verboten! Kinder haften für ihre Eltern!

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group