JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=c95439be829ae9b3d572e54a169efe97Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

[C#][DirectX] Input

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jones
Senior JLI'ler


Alter: 33
Anmeldedatum: 03.03.2005
Beiträge: 208
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 22.04.2006, 19:40    Titel: [C#][DirectX] Input Antworten mit Zitat

Ich sitz jetzt schon lange an einem Problem und komm nicht mehr weiter. Ich hab mir eine Input Klasse mit Managed DirectX und C# gebastelt. Ich hab die Funktionen 'IsKeyPressed', 'IsKeyDown' und 'IsKeyUp'. Was 'IsKeyPressed' dürfte (hoffentlich) jedem klar sein. Mit 'IsKeyDown' überprüft man ob die Taste gedrückt ist und einen Durchlauf davor nicht gedrückt war. Mit 'IsKeyUp' überprüft man ob die Taste einen Durchlauf davor gedrückt war und jetzt nicht mehr gedrückt ist. Mein Problem ist das 'IsKeyDown' und 'IsKeyUp' nicht das tun was sie sollen, der Code ist aber (eigentlich) korrekt.

Variables
CPP:
private Device keyboard;
private KeyboardState Keyboardstate = null;
private KeyboardState OldKeyboardstate = null;


Initialization
CPP:
        private void InitDevices(Form form)
        {
            // Create keyboard device
            keyboard = new Device(SystemGuid.Keyboard);
            if (keyboard == null)
            {
                throw new Exception("No keyboard found.");
            }

            ...

            // Set cooperative level
            keyboard.SetCooperativeLevel(
                form,
                CooperativeLevelFlags.Background |
                CooperativeLevelFlags.NonExclusive);

            ...

            // Acquire devices for capturing
            keyboard.Acquire();
        } // InitDevices()


Updatefunction
CPP:
        private void UpdateKeyboard()
        {
            // Copy current Keyboard State before update it
            OldKeyboardstate = Keyboardstate;
            // Get Keyboard State
            Keyboardstate = keyboard.GetCurrentKeyboardState();
        } // UpdateKeyboard()


Inputfunctions
CPP:
        public bool IsKeyPressed(Key key)
        {
            return Keyboardstate[key];
        } // IsKeyPressed(key)

        public bool IsKeyDown(Key key)
        {
            return Keyboardstate[key] && !OldKeyboardstate[key];
        } // IsKeyDown(key)

        public bool IsKeyUp(Key key)
        {
            return OldKeyboardstate[key] && !Keyboardstate[key];
        } // IsKeyUp(key)


Hmm, leider gibts kein C# Code Tags, aber C++ Tags tuns ja genauso Smile
Ich hoffe irgendwer kann was damit anfangen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jones
Senior JLI'ler


Alter: 33
Anmeldedatum: 03.03.2005
Beiträge: 208
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 22.04.2006, 20:59    Titel: Antworten mit Zitat

Ich glaube hier eine Lösung zu finden ist ein bisschen schwerer, ich hab jetzt eine leichtere Lösung gefunden. Mann kann KeyboardState nicht einfach per Gleichheitszeichen kopieren und da KeyboardState keinen Copyconstructor hat lass ich das lieber Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 22.04.2006, 21:11    Titel: Antworten mit Zitat

hm, dann nimm doch memcpy. Oder mach einen Doppelbufferung, so wie ich das gemacht habe. Ich bneutzte 2 Zeiger auf die Array als zugriff und kann die biem kopierne einfach vertauschen. So muss ich nur die Zeiger vertauschen, aber da ich über die Zeiger auf die Array zugreife (ganz normal mit [] ) hab ich quasi die Array vertauscht.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jones
Senior JLI'ler


Alter: 33
Anmeldedatum: 03.03.2005
Beiträge: 208
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 22.04.2006, 21:22    Titel: Antworten mit Zitat

Ich benutze C# Wink
Ich hatte das selber Problem bei meiner letzen Input Klasse in C++.
Trotzdem danke Smile
edit: ich habe jetzt eine leichtere Lösung gefunden die es genau so gut tut.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
malignate
Mini JLI'ler



Anmeldedatum: 16.08.2005
Beiträge: 16

Medaillen: Keine

BeitragVerfasst am: 24.04.2006, 18:19    Titel: Antworten mit Zitat

Machs lieber so wie in den Beispielen und verwende einen neuen Thread.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum