JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Mausabfrage

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



Anmeldedatum: 11.01.2003
Beiträge: 153

Medaillen: Keine

BeitragVerfasst am: 19.08.2003, 14:30    Titel: Mausabfrage Antworten mit Zitat

Also...
Ich hab die Mausabfrage gemacht wie im Buch (altes):

Code:
void InitDirectInput(HINSTANCE hInst)
{
    if(FAILED(DirectInput8Create(hInst, DIRECTINPUT_VERSION,
                                 IID_IDirectInput8,(void**)&lpDI,NULL)))
    {
    }
 
   if(FAILED(lpDI->CreateDevice(GUID_SysMouse, &lpDIMouse, NULL)))
    {
    }

    // c_dfDIMouse ist eine vordefinierte Variable
    if(FAILED(lpDIMouse->SetDataFormat(&c_dfDIMouse)))
    {
    }
 
    // Kooperationsebene festlegen
    if(FAILED(lpDIMouse->SetCooperativeLevel(hWnd,DISCL_FOREGROUND |
                                                  DISCL_NONEXCLUSIVE)))
    {   
    }
     hMouseEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
   
    if(FAILED(lpDIMouse->SetEventNotification(hMouseEvent)))
    {
    }
   
    ZeroMemory(&DIProperties,sizeof(DIProperties));
    DIProperties.diph.dwSize       = sizeof(DIPROPDWORD);
    DIProperties.diph.dwHeaderSize = sizeof(DIPROPHEADER);
    DIProperties.diph.dwObj        = 0;
    DIProperties.diph.dwHow        = DIPH_DEVICE;
    // Puffer größe festlegen
    DIProperties.dwData            = 16;
 
    // Puffergröße für Mouseeingaben setzen
    // bei Ereignisbehandlung zwingend notwendig
    lpDIMouse->SetProperty(DIPROP_BUFFERSIZE, &DIProperties.diph);
 

    // Zugang zur Mouse verschaffen
    lpDIMouse->Acquire();
}
 





Code:
void GetMouseData()
{
   DWORD NumElements = 1;
    DIDEVICEOBJECTDATA data;
    ZeroMemory(&data,sizeof(data));


    if(FAILED(lpDIMouse->GetDeviceData(sizeof(data),&data,&NumElements,0)))
    {
        // die Mouse wurde zwischenzeitlich von einer andere Anwendung genutzt,
        // deshalb Kontrolle wiederholen
        lpDIMouse->Acquire();
        return;
    }

    switch(data.dwOfs)
    {
        case DIMOFS_X:   
         //if ((Mouse_X+data.dwData+16<=800)&&(Mouse_X+data.dwData>15))
         Mouse_X+= data.dwData;
            break;

        case DIMOFS_Y:
         //if ((Mouse_Y+data.dwData+23<=600)&&(Mouse_Y+data.dwData>0))
         Mouse_Y+= data.dwData;
            break;

        case DIMOFS_BUTTON0:
         break;

        case DIMOFS_BUTTON1:
            break;
    }

}



Aber aus irgendeinem Grund hakt die Maus ziemlich...
(siehe www.walko.de/andre/kings.zip)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 19.08.2003, 14:36    Titel: Antworten mit Zitat

Code:

switch(data.dwOfs)
    {
        case DIMOFS_X:   
         //if ((Mouse_X+data.dwData+16<=800)&&(Mouse_X+data.dwData>15))
         Mouse_X+= data.dwData;
            break;

        case DIMOFS_Y:
         //if ((Mouse_Y+data.dwData+23<=600)&&(Mouse_Y+data.dwData>0))
         Mouse_Y+= data.dwData;
            break;

        case DIMOFS_BUTTON0:
         break;

        case DIMOFS_BUTTON1:
            break;
    }


Mit diesem Code kann man den Cursor immer nur auf einer Achse bewegen. Nimm die switch-Anweisung raus...
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
underberg
JLI'ler



Anmeldedatum: 11.01.2003
Beiträge: 153

Medaillen: Keine

BeitragVerfasst am: 19.08.2003, 14:40    Titel: Antworten mit Zitat

Also mit if, oder wie?
(Btw: Komisch, habs eigentlich schonmal genauso gemacht und das hatte funktioniert...)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 19.08.2003, 14:41    Titel: Antworten mit Zitat

Lass alles weg und addiere nur die Deltas.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
underberg
JLI'ler



Anmeldedatum: 11.01.2003
Beiträge: 153

Medaillen: Keine

BeitragVerfasst am: 19.08.2003, 14:46    Titel: Antworten mit Zitat

Also wenn ich bloß

Code:
Mouse_X+= data.dwData;
Mouse_Y+= data.dwData;

nehme, dann bewegt er die Maus nur in der Diagonalen (addiert halt zu beiden, dass selbe dazu...)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 19.08.2003, 15:02    Titel: Antworten mit Zitat

Ich mach es mit ::GetDeviceState und benutze die struc DIMOUSESTATE.

lX : x Delta
lY : y Delta
lZ : Mausrad Delta
rgbButtons : Mausknöpfe
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
underberg
JLI'ler



Anmeldedatum: 11.01.2003
Beiträge: 153

Medaillen: Keine

BeitragVerfasst am: 19.08.2003, 15:40    Titel: Antworten mit Zitat

Hat sich erledigt...
Lag an was anderem...

Trotzdem thx.
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