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
|
Verfasst am: 22.04.2006, 19:40 Titel: [C#][DirectX] Input |
|
|
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
Ich hoffe irgendwer kann was damit anfangen |
|
Nach oben |
|
|
Jones Senior JLI'ler
Alter: 33 Anmeldedatum: 03.03.2005 Beiträge: 208 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 22.04.2006, 20:59 Titel: |
|
|
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 |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 22.04.2006, 21:11 Titel: |
|
|
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 |
|
|
Jones Senior JLI'ler
Alter: 33 Anmeldedatum: 03.03.2005 Beiträge: 208 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 22.04.2006, 21:22 Titel: |
|
|
Ich benutze C#
Ich hatte das selber Problem bei meiner letzen Input Klasse in C++.
Trotzdem danke
edit: ich habe jetzt eine leichtere Lösung gefunden die es genau so gut tut. |
|
Nach oben |
|
|
malignate Mini JLI'ler
Anmeldedatum: 16.08.2005 Beiträge: 16
Medaillen: Keine
|
Verfasst am: 24.04.2006, 18:19 Titel: |
|
|
Machs lieber so wie in den Beispielen und verwende einen neuen Thread. |
|
Nach oben |
|
|
|