JoyCount() erkennt disconnect nicht [BRLbug+erledigt]

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

d-bug

Betreff: JoyCount() erkennt disconnect nicht [BRLbug+erledigt]

BeitragMo, Jun 01, 2009 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Gemeinde,

Situation 1:

Gehen wir einmal davon aus wir hatten ein USB-Joypad jeglicher Art. Nun starten wir folgenden Code mit eingestecktem Joypad:
BlitzMax: [AUSKLAPPEN]
SuperStrict

Graphics (800, 600, 0)

Repeat
Local joyNum:Int = JoyCount()
Cls

If joyNum
For Local thisPort:Int = 0 Until joyNum
Local joy$ = JoyName(thisPort) + " on port " + thisPort + " = "
DrawText joy$, 0, thisPort * 14

For Local thisButton:Int = 0 To Int(Log(JoyButtonCaps(thisPort)) / Log(2))
DrawText (JoyDown(thisButton, thisPort), (TextWidth(joy$) + 1) + (thisButton * 24), thisPort * 14)
Next
Next
Else
DrawText ("No Joypads available", 0, 0)
EndIf

Flip
Until KeyHit(KEY_ESCAPE) Or AppTerminate()
End

(Der Code ist von YAN, einem User auf bb.com)

Jetzt ziehen wir mal das JoyPad einfach aus dem USB-Port. Erschreckender weise erkennt JoyCount() das nicht und das JoyPad (ein Logitech Dual Action) wird propper weiter als vorhanden angezeigt.


Situation 2:
Wir starten den Code mit nicht eingestecktem JoyPad. Stecken das JoyPad jetzt ein und ... BAMM ... es wird ordnungsgemäß erkannt.

Irgendwie kommt mir das gerade total ungelegen, da mein Code schon erkennen sollte, ob das Joypad gerade disconnected wurde oder nicht. Es wird aber erst erkannt, wenn ich den Code abermals starte.

So geschehen übrigens auf dem, in meiner Signatur verewigtem, System.


Kennt von euch einer eine bessere Abfragemöglichkeit?



~edit~
Nach durchforsten von pub.freejoy nebst freejoy.macos.c wurde mir das Problem klar. Es heißt Mark Sibley. Very Happy
Unter OSX wird die zuständige C Variable nur dann aktualisiert, wenn sie 0 ist. Ganz großes Kino. Das heißt so viel, dass wenn einen Joystick/pad einstöpselt, wenn schon einer angeschlossen ist, dieser auch nicht erkannt werden wird, weil die Variable ja bereits > 0 ist.

Top Arbeit, Hörr Sibley!
 

ChristianK

BeitragMo, Jun 01, 2009 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem befindet sich in der Datei freejoy.macos.c im pub.freejoy Verzeichnis. Die Funktion JoyCount gibt hier einfach nur den Wert der Variable "macjoycount" zurück. Nur wenn die Anzahl der Controller 0 ist, werden die angeschlossenen Geräte neu gezählt, das heißt nur beim ersten Aufruf:

Code: [AUSKLAPPEN]
int JoyCount()
{
   if (!macjoycount) InitMacJoy();
   return macjoycount;
}

Vielleicht solltest du das als Bug-Report posten. Unter Windows funktioniert JoyCount übrigens.

Edit: Etwas zu spät. Smile
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group