Inputproblem



  • Hallo,

    bin grad dabei mir neue Gedanken über den Input für mein Spiel zu machen.

    Würd gern Maus,Tastatur und GamePad(PS3/4 und Xbox) ermöglichen.

    Hab auch schon fleißig mir was zusammengebastelt.

    Mit WM_KEYDOWN,WM_CHAR,WM_LBUTTONDOWN...

    Situation 1(Multiplayer Problem):
    Das wenn ich z.B 'W' gedrückt halte und dann Pfeiltaste, das die 'W' Taste nicht durch kommt...(Oder 'W' + 'D' es kommt nur eine Taste durch)
    Gleichzeitiges spielen an einer Tastatur ist dadurch nicht möglich...

    Muss wohl mit dem Windowsmessages zusammenhängen,wer Quellcode will, sagt bescheid.

    Situation 2(GamePads):

    Hab schon einiges über alternativen wie HID/RAWINPUT gelesen.
    (Wenn ich GamePads unterstützen möchte,ist das wohl der weg?)

    Zu einer gut dokumentierten Input Library , würd ich nicht nein sagen. Falls da jemand ne Empfehlung hat.



  • InputNAP schrieb:

    Situation 1(Multiplayer Problem):
    Das wenn ich z.B 'W' gedrückt halte und dann Pfeiltaste, das die 'W' Taste nicht durch kommt...(Oder 'W' + 'D' es kommt nur eine Taste durch)
    Gleichzeitiges spielen an einer Tastatur ist dadurch nicht möglich...

    Muss wohl mit dem Windowsmessages zusammenhängen,wer Quellcode will, sagt bescheid.

    W+D sollte schon gehen, da solltest du entsprechende WM_KEYDOWN Nachrichten bekommen.

    Was meist nicht geht ist z.B. W+A+S. Und das ist dann eine hardwareseitige Limitierung des Keyboard. Stichwort "N-Key Rollover".

    Falls du wirklich mit W+D schon ein Problem hast, und das in anderen Programmen funktioniert, dann liegt es vermutlich wirklich an deinem Code. Da du den aber nicht herzeigst, ist schwer zu erraten was das Problem sein könnte.
    Es sollte nämlich mit WM_KEYDOWN bzw. GetKeyState bzw. GetAsyncKeyState ganz normal funktionieren. Wenn ich nen stinknormalen Text-Editor aufmache und D drücke während ich schon W gedrückt halte, dann passiert das:
    wwwwwwwwwwdddddd
    D.h. es funktioniert.

    InputNAP schrieb:

    Situation 2(GamePads):

    Hab schon einiges über alternativen wie HID/RAWINPUT gelesen.
    (Wenn ich GamePads unterstützen möchte,ist das wohl der weg?)

    Zu einer gut dokumentierten Input Library , würd ich nicht nein sagen. Falls da jemand ne Empfehlung hat.

    Gut dokumentierte Library für nur Input kenne ich nicht.
    Gute Libraries (keine Ahnung wie gut dokumentiert) die u.A. auch Input anbieten sind z.B. SDL und SFML. Die Teile die du nicht brauchst musst du ja nicht verwenden. Ist aber bei beiden viel drinnen was dir allgemein das Leben leichter macht, wenn du ein Spiel programmieren willst.

    Oder du implementierst es selbst, gibt ja genug Quellen zu dem Thema. z.B.
    http://www.codeproject.com/Articles/185522/Using-the-Raw-Input-API-to-Process-Joystick-Input



  • hi,

    Danke erstma für die ausführliche Antwort.

    Die N-Key Rollover - Sache stimmt...

    Aus dem Nähkästchen:

    Die Sache mit den Libs...
    Habe bis jetzt keine grafik/game Libs drin.
    Nutze C++/Directx11 und STL/Boost
    Habe schon bissel weiß , das Main Menu sieht so aus :

    #ifndef MY
    #define MY
    #include "DXWindow.h"
    #include "DXText.h"
    #include "DXFont.h"
    
    class MainMenuWindow : public DXWindow
    {
    private:
    	std::shared_ptr<DXButton> c;
    	std::shared_ptr<DXButton> d;
    	std::unique_ptr<DXButton> d2;
    	std::unique_ptr<DXButton> d3;
    	std::unique_ptr<DXText> title;
    public: 
    	MainMenuWindow(ID3D11Device* device, int clientwidth, int clientheight)
    	{
    
    		Initialize(device,800,600);
    		setClientSize(clientwidth, clientheight);
    
    		setTextures(device, L"../DX_GUI/texturefiles/gta3screen.png");
    		setIdentifierName(L"Main Menu");
    
    		title = make_unique<DXText>(device);
    		title->setFontStyle("../DX_GUI/fonts/fontdata43.txt", L"../DX_GUI/fonts/fonts_43alpha5.dds");
    		title->setTextColor(0, 0, 0,0.5f);
    
    		title->setText(L"Main Menu");
    		title->setXOnCenter(width, xPos);
    		title->setPosY( yPos+10);
    
    		//=========================================
    		c = std::make_shared<DXButton>();
            c->setSize(187, 74);
    		c->setPosY(80 + yPos);
    		c->setXOnCenter(width,xPos);
    
    		c->setText(L"Singleplayer", 0.0f, 1.0f, 1.0f);
    		c->addTexture(device, L"../DX_GUI/texturefiles/buttonunpressed.png");
    		c->addTexture(device, L"../DX_GUI/texturefiles/buttonpressed.png", ButtonState::PRESSED);
    		c->addMouseEvent([this]{closeThisOpenThat(L"GameWindow"); }, MouseActions::LCLICK);
    
    		d = std::make_unique<DXButton>(*c);
    		d->setPosY( 280 + yPos);
    		d->setText(L"Multiplayer", 1.0f, 0.0f, 1.0f);
    		d->addMouseEvent([this]{closeThisOpenThat(L"SEC2"); }, MouseActions::LCLICK);
    
    		d2 = std::make_unique<DXButton>(*c);
    		d2->setPosY( 380 + yPos);
    		d2->setText(L"Options", 1.0f, 1.0f, 1.0f);
    		d2->addMouseEvent([this]{ }, MouseActions::LCLICK);
    
    		d3 = std::make_unique<DXButton>(*c);
    		d3->setPosY( 480 + yPos);
    		d3->setText(L"Exit",0.0f,0.0f,1.0f);
    		d3->addMouseEvent([this]{Win32Window::closeApplication(); }, MouseActions::LCLICK);
    
    		//==========================================
    
    		visible = true;
    		//==========================================
    		attachDXControls({ c.get(), d.get(), d2.get(), d3.get(),title.get() });
    		InitializeControls(device, clientwidth, clientheight);
    	}
    	~MainMenuWindow()
    	{
    
    	}
    };
    #endif
    

    Naja^^ istn Anfang;)
    Steckt schon etwas Arbeit drin.
    Ja war nen guter Hinweis mit SFML, werd ich ma durchschauen.
    Hatte mich bis jetzt erfolgreich um Libs "gedrückt".
    Weils "cooler" ist *hust*
    Aber für Zukunft ist es vllt doch besser^^
    Wenn man noch zu Lebzeiten fertig werden will;)
    Ach jetzt jetzt hab ich drauf losgeschrieben....Sorry=P
    Ich lasse es ma für dich Nachwelt stehen^^



  • Naja kommt drauf an was du machen willst.
    Willst du C++, low-level Grafik-API-Frickelei, Systemprogrammierung lernen, dann ist es schon gut wenn du alles selbst schreibst.
    Willst du ein Spiel entwickeln, dann ist es, *hust*, ziemlich doof.
    😉



  • Naja kommt drauf an was du machen willst.
    Willst du C++, low-level Grafik-API-Frickelei, Systemprogrammierung lernen, dann ist es schon gut wenn du alles selbst schreibst.
    Willst du ein Spiel entwickeln, dann ist es, *hust*, ziemlich doof.
    😉

    Jo, ist halt die Frage.
    Ich mag es zu wissen ,wie dich Sachen funktionieren;)
    Ist halt manchma echt hartes Brot...

    Es gibt Sachen in der WinAPI , da scheint 3 Tage keine Sonne mehr , wenn man sich da durch geprügelt hat....
    Mit dem HDI kram gehts wohl, noch weiter runter in den Keller 😉

    Frust ist da "vorprogrammiert" 😃

    Vllt kommt ja morgen doch ne Lib dazu... oder ich mach den Kram selbst.

    Wenn ich nen fertiges Spiel wollte, hätte ich gleich Unity nehmen können^^
    Mein 2D Zelda Klon muss sich noch etwas gedulden=D

    Morgen bin ich vllt weniger gefrustet^^

    Gut, ich werd mich demnächst ma richtig anmelden!Schönes Forum!


Log in to reply