2017-06-10 5 views
-1

so habe ich nach einer Antwort auf dieses Problem an vielen verschiedenen Orten gesucht, aber ich habe nicht gefunden, dass eine, die für meine Situation funktioniert. Ich entwickle ein Spiel mit MonoGame (Microsoft XNA) und möchte eine Klasse haben, die meine Eingaben verarbeitet. Da XInput nur prüfen kann, ob eine Taste in einem bestimmten Frame nicht aktiv ist, möchte ich eigene Funktionen erstellen, um zu prüfen, ob sie gedrückt, losgelassen oder gehalten wurden.Pass Enum als Argument in einer Funktion

Hier ist mein Problem:

public static void getKeyPress(Enum key) 
    { 
     updated = Keyboard.GetState(); 
     if (updated.IsKeyDown(/* what can i put here to have key be the 'Keys' enum */)) 
     { 

     } 

     if (updated.IsKeyDown(Keys.Space)) 
     { 

     } 

    } 

Also, mein Problem ist, dass ich nicht herausfinden kann, wie man den Schlüssel Enum verwenden, die ich als meine Funktion Argument haben. Ich versuche, das Argument für die IsKeyDown-Funktion zu haben, die im XNA-Framework enthalten ist. Die IsKeyDown-Funktion akzeptiert nur etwas von der Keys-Enumeration, die mit dem Framework vorgefertigt ist. Die zweite if-Anweisung zeigt die korrekte Verwendung der Funktion mit Keys.Space. Ich möchte die getKeyPress Funktion Arbeit wie diese haben:

if (getKeyPress(Keys.Backspace)) 
{ 
    //backspace was pressed 
} 

Oder dies würde auch funktionieren:

if (getKeyPress(Backspace)) 
{ 
    //backspace was pressed 
} 

ich völlig verloren bin, wenn mir jemand dabei helfen könnte heraus, dass würde sehr geschätzt werden.

+0

Methode (Objekt Enum) –

+0

Wenn ich Dich richtig bin zu verstehen, wollen Sie nur in der Lage sein, passieren 'Keys' in Ihre Methode, dann sollten Sie in der Lage sein, dies zu beheben mit nur das Wort zu ändern' Enum' in deiner Signatur zu 'Keys'. Verstehe ich deine Frage richtig? – pstrjds

+0

Ich habe eine Antwort hinzugefügt, aber ich bin ein wenig verwirrt, welche 'Keys' Enumeration Sie verwenden, Sie erwähnen XNA Framework, das, soweit ich weiß, 'Keys.Back' als Wert für Backspace hat (siehe [Dokumentation] (https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.keys(v=xnagamestudio.40).aspx)) nicht 'Keys.Backspace' – pstrjds

Antwort

1

Wenn ich richtig verstanden habe, sollten Sie in der Lage sein, einfach Ihre Methodensignatur zu ändern, um den Typ anzugeben, den Sie weitergeben möchten. In Ihrem Fall möchten Sie die Keys enum.

public static void getKeyPress(Keys key) 
{ 
    updated = Keyboard.GetState(); 
    if (updated.IsKeyDown(key)) 
    { 
    } 

    if (updated.IsKeyDown(Keys.Space)) 
    { 
    } 
} 
+0

Das hat funktioniert. Ich bin noch neu im Umgang mit Enum-Typen, vielen Dank. Ich werde dies als Antwort akzeptieren, wenn der Timer abgelaufen ist. –