Hotplugging Joysticks und Gamepads unter OSX

7

Ich habe die plattformübergreifenden Joystick-Unterstützungsfunktionen für GLFW, SDL2 und SFML getestet. SDL2 scheint am vollständigsten zu sein, kann jedoch nicht erkennen, wann Joysticks unter OSX ausgesteckt wurden. Für mich ist dies ein grundlegendes Merkmal.

Die Unterstützung der Joystick-Erkennung scheint auf dem Mac viel schwächer zu sein als unter Windows. Was kann ich tun, um dies zu überwinden?

Charlie
quelle
1
Das Hilfezentrum erklärt sehr deutlich, welche Fragen nicht zum Thema gehören (ebenso wie Game Development Meta ). Fragen zu "Listen" und "Welche Bibliothek sollte ich verwenden" ("Gibt es plattformübergreifende C ++ - Bibliotheken ...") sowie allgemeine und meinungsorientierte Fragen ("Was macht dieses Hotplugging schwierig?"). ..? ") sind nicht zum Thema. Sie scheinen das Ziel einer StackExchange-Site falsch verstanden zu haben, nämlich konkrete objektive Fragen und Antworten zu archivieren und nicht unbedingt "Entwickler in einer ähnlichen Position anzusprechen". Glücklicherweise enthält das Hilfezentrum auch eine Liste von Orten, an denen Sie Fragen außerhalb des Themas stellen können.
1
Was schlägst du vor? Dass es keine technische Frage zu beantworten gibt? Es ist sicherlich keine subjektive Frage.
Charlie
3
Dies ist keine "welche Technologie zu verwenden?" Frage. Ich versuche zu verstehen, warum OSX ein so großes Problem mit USB-Geräten hat und wie man sich insbesondere dem Hotplugging-Problem nähern könnte. Wenn Sie die Antwort kannten oder etwas hinzuzufügen hatten, sollten Sie sie einfach teilen oder weitermachen und jemand anderem erlauben, zu antworten, da dies in erster Linie der Stapelaustausch ist ... Eine Möglichkeit für Menschen, anderen zu helfen. Ich werde nicht wieder auf diesem Board posten. Ein kleiner Verlust, denke ich, aber Sie werden verstehen warum. Ich habe 4 Antworten auf meine Frage erhalten, von denen keine relevant ist. Oder sogar hilfreich.
Charlie
1
@ Charlie, ich habe für die Wiedereröffnung gestimmt. Ich versuche fast immer, diese Stimmen zu erklären, und Ihre ist eine der ersten Stimmen, bei denen ich erkläre, warum sie positiv ist. Der Grund dafür, dass "welche technischen" Fragen nicht zum Thema gehören, ist, dass sie nur auf der Grundlage spezifischer Projektanforderungen beantwortet werden können, was normalerweise bedeutet, dass sie nicht richtig beantwortet werden können. In Ihrem Fall, in dem Sie eine ganz bestimmte Funktionsanforderung haben, halte ich die Frage für beantwortbar und nützlich. Viel Glück beim Erhalt der restlichen Stimmen. Ich habe Ihre Frage auch noch einmal bearbeitet. Sie können jederzeit nach Belieben zurückkehren oder erneut bearbeiten.
Seth Battin
1
Ich würde argumentieren, dass "Gibt es einen bestimmten Grund, warum die Unterstützung der Joystick-Erkennung für OSX schwächer ist" hier völlig vom Thema abweicht. Die Frage "Was kann getan werden?" Ist besser. Vielleicht so etwas wie: "Wie kann ich feststellen, dass ein USB-Gamepad während des Spiels unter OSX mit SDL2 getrennt wird?", Wobei der erste Absatz vollständig entfernt wird. Diese Formulierung scheint über jeden Zweifel erhaben zu sein.
Trevor Powell

Antworten:

4

Mit der neuesten SFML von github (2.1 sollte auch funktionieren, aber ich habe nicht damit getestet) können Sie auf die sf::Event::JoystickConnectedund -Ereignisse warten, sf::Event::JoystickDisconnectedwie im SFML-Ereignis-Tutorial beschrieben . Ich habe die Ereignisse getestet und sie werden beide auf Mac und Windows ausgelöst.

Ein Beispielprogramm zum Testen würde folgendermaßen aussehen:

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML Joystick Events!");


    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event:: JoystickConnected)
            {
                std::cout << "joystick connected: " << event.joystickConnect.joystickId << std::endl;
            }
            else if (event.type == sf::Event::JoystickDisconnected)
            {
                std::cout << "joystick disconnected: " << event.joystickConnect.joystickId << std::endl;
            }
            else if (event.type == sf::Event::Closed)
            {
                window.close();
            }
        }
    }

    return 0;
}
NoobsArePeople2
quelle