ExamineKeyboard() und Xtreme3D.dll

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

ExamineKeyboard() und Xtreme3D.dll

Beitrag von MVXA »

Hallo!
Ich hab mal wieder ein kleines Problem, wo ich nicht weiter komme.

Sachverhalt
Ich benutze die Xtreme3D.dll für n paar 3D Animationen. klappt auch alles ganz wunderbar. Screen wird im Fenster und im Vollbildschirm Modus geöffnet und ich sehe auch die Animation. Für die Tastenabfrage benutze ich die PB Interne Lib.

Problem
Mein Problem ist nu, ich kann, wenn ich den Bildschirm im Vollbild modus öffne, die Funktion wie [c]KeyboardPushed(#PB_Key_Escape)[/c] aus der Lib nicht mehr benutzen. Rückgabe bleibt einfach 0. Im Fenstermodus funktioniert alles.

Frage an euch
Gibt es ne andere möglichkeit um komfortable den Input Tastatur abzufragen? Wenn nein, könnt ihr mir erklären warum es sich so merkwürdig verhält ?

Danke :allright:
Bild
netfreak
Beiträge: 91
Registriert: 23.10.2004 18:30
Kontaktdaten:

Beitrag von netfreak »

ja es gibt noch den hier:

Code: Alles auswählen

GetAsyncKeyState_(VK_ESCAPE)
Am besten schaust mal hier:

http://msdn.microsoft.com/library/defau ... ystate.asp
und hier noch die einzelnen Tasten:
http://msdn.microsoft.com/library/defau ... yCodes.asp

Ich weiß aber net ob das auch im Vollbild Modus geht!
Am besten zeigst mal den Code wie du die ESC Taste abfragst!

mfg
netfreak
mfg
netfreak
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Eigentlich ganz Normal:

Code: Alles auswählen

    Repeat 
        ExamineKeyboard()
        ;*---
        If KeyboardReleased(#PB_Key_Escape) : Quit = #True : EndIf
        If ScreenMode\scrFullscreen = #False: WindowEvent(): EndIf
        
        ;If bolDebugMode = #True: X3D_SetText_(txtInfo, "FPS: " + Str(FPS)): EndIf
        
        FPS = X3D_Render_()  
    Until Quit = #True
Bild
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Und der PB-Befehl zum Abfragen der Taste, die als letzte gedrückt wurde? Funzt der auch nicht? Oder liegt es vielleicht an der Xtreme3D.dll ? KAnn ja sein, dass die fehlerhaft ist...
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Wenn ich des im Vollbild starte, bleibt KeyboardReleased(#PB_Key_Escape) immer 0. Hab ich im Debuger und mit direktem Paint auf den Screen überprüft.
Bild
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Nein, ich meine weder KeyboardPushed() noch KeyboardReleased(). Da ist noch ein anderer PB-Befehl, der die Taste, die als letzte gedrückt wurde, zurückgibt. Werd gleich mal nachsehen, wie der heisst...

//EDIT: Der Befehl heisst

Code: Alles auswählen

KeyboardInkey()
PureBasic Hilfe hat geschrieben:Gibt das zuletzt eingegebene Zeichen zurück, sehr nützlich wenn eine einfache Tastatureingabe für ein Spiel (Name in einem HighScore, in einer Game-Konsole, etc.) erforderlich ist.

Der Befehl ExamineKeyboard() muss vor dieser Funktion aufgerufen werden, um den Tastatur-Status zu aktualisieren.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

KeyboardPushed/-Released/-Inkey sind zur benutzung im DX-Screen.

falls der Fullscreen-Mode von XTreme3D ein Vollbild-Fenster ist,
kann das nicht funktionieren.

mal rumtesten was was ist, evtl. kann man die Tastatur-Events des 3D-Fensters abfragen...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Ah, ich glaub, ich hab die Lösung. Die Xtreme3D Engine ist eine OpenGL Engine. Vielleicht blockiert das ja die Tastenevents o_O.
Bild
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Die Lösung ist einfacher als ihr glaubt.

X3D ist eine OpenGL-Engine
ExamineKeyboard() benutzt DirectX.

Das kann beides nicht miteinander funktionieren, da beide den direkten und uneingeschränkten Hardwarezugriff brauchen um zu funktionieren. In deinem Fall nuckelt OpenGL schon dran, so dass DirectX eine Initialisierung von DirectInput (der Teil für die ganzen Eingaben von Maus, Tastatur, Joystick, sonstwas) abbricht.

Benutze lieber GetAsyncKeyState_() wie weiter oben beschrieben.


GReetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Antworten