Mittels XNA 4.0 Xbox 360 "Guide" Button abfangen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ClonkAndre.

    Mittels XNA 4.0 Xbox 360 "Guide" Button abfangen

    Hallo liebe Community!

    Ich kann mittels XNA Input jeden Button auf dem Xbox 360 Controller abfangen.
    Dies funktioniert auch alles schön und gut, jedoch kann ich nicht den Guide Button des Controllers abfangen. (Bild mit Guide Button im Anhang)

    Dies ist der Code: (Ich gehe davon aus das es der "BigButton" ist da es sonst nichts anders gibt)

    VB.NET-Quellcode

    1. If Controller.IsButtonDown(Buttons.BigButton) Then
    2. ' Code hier
    3. End If


    Doch wenn ich den "BigButton" drücke wovon ich ausgehe das es der Guide Button sein muss. Passiert einfach nichts.
    Habt Ihr irgendwie eine Idee wie ich den Guide Button anfangen kann?
    Bilder
    • guidebtn.png

      38,66 kB, 376×328, 173 mal angesehen
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!
    Irgendwo las ich mal, dass der Guide-Button nicht über APIs abgreifbar ist.
    Der Big Button dürfte nur bei den "Big Button Pads" verfügbar sein.
    Die sehen aber völlig anders aus.

    Edit:
    Hier hat wohl jemand einen Guide-Button-Poller in C++ geschrieben.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    @petaod
    Danke für den Link, ich werde mir es mal anschauen und versuchen zu verstehen ^^
    Jo stimmt habe gerade gegoogelt wie diese big button pads aussehen und das kann echt sein das der Big Button damit gemeint ist.
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!
    War mir ja leider bisschen klar aber mit C++ Code bin ich leider garnicht vertraut (oder es fehlen mir Programmierkenntnisse)
    Kann man irgendwie den Code den du mir vorgeschlagen hast als DLL kompilieren und dann irgendwo einbauen? Z.b. in einem vb.net Programm? Oder ist das nur mit einer C# Dll möglich?
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ClonkAndre“ ()

    Doch geschafft!

    Soooo ich bin so eben auf Gold gestoßen!
    Ich habe nochmal mich auf google begeben und gesucht... und gesucht... Dann bin ich auf ein anderes Forum gestoßen da hat ein User den C++ Code auf C# geportet! Und Code von C# ist nicht schwer auf vb.net zu konvertieren. Also hatte ich Glück.

    Hier der Code falls irgendwer auch den GuideButton abfangen möchte:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Runtime.InteropServices
    3. Public Class Test
    4. <DllImport("xinput1_4.dll", EntryPoint:="#100")> ' xinput befindet sich im System32 Ordner.
    5. Public Shared Function SetGamepad(ByVal playerIndex As Integer, ByRef struc As XINPUT_GAMEPAD_STRUCT) As Integer
    6. End Function
    7. Public Structure XINPUT_GAMEPAD_STRUCT
    8. Public eventCount As UInt32
    9. Public wButton As UShort
    10. Public LeftTrigger As Byte
    11. Public RightTrigger As Byte
    12. Public LeftJoyY As Short
    13. Public LeftJoyX As Short
    14. Public RightJoyY As Short
    15. Public RightJoyX As Short
    16. End Structure
    17. Private XButtons As XINPUT_GAMEPAD_STRUCT
    18. Private Function IsGuideButtonPressed(playerIndex As Integer) As Boolean
    19. SetGamepad(playerIndex, XButtons) ' Set Gamepad and PlayerIndex
    20. Return ((XButtons.wButton And &H400) <> 0) ' return GuideButton press status
    21. End Function
    22. End Class


    Die Function IsGuideButtonPressed ruft Ihr ambesten mit einem Timer oder einer While Schleife ab.
    Mit dieser Methode könnte man auch andere Buttons des Controllers abrufen. Da ich aber nur die Guide Taste benötige, lass ich den Code so.
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ClonkAndre“ ()

    Vielleicht noch ein kleiner optischer Verbesserungsvorschlag ohne den Umweg über eine Zwischenvariable:

    VB.NET-Quellcode

    1. ​Private Function IsGuideButtonPressed(playerIndex As Integer) As Boolean
    2. SetGamepad(playerIndex, XButtons) ' Set Gamepad and PlayerIndex
    3. Return ((XButtons.wButton And &H400) <> 0) ' return GuideButton press status
    4. End Function
    ist etwas kürzer.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod
    Oh jo ich übernehme den mal, der sieht wirklich viel aufgeräumter aus :)
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!