JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Mausproblem mit Direct Input

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 20.08.2004, 14:21    Titel: Mausproblem mit Direct Input Antworten mit Zitat

Hallo,

ich wollte einen eigenen Mauscursor für ein Spiel machen. Der Cursor ist ein Spriteobjekt und die bewegung wollte ich mit Direct Input abfragen. Für die Mausabfrage habe ich die Klasse CInputManager aus dem 2. Buch JLI genommen und die Mausabfrage so optimiert das nicht nur der erste wert sondern 10 Werte in einer Schleif abgefragt werden. Wenn ich das kompiliere und bei mir starte läuft alles einwandfrei nur auf allen anderen Rechner die nicht die debugversion von directx installiert haben reagiert die Maus auch Tastatureingaben, besonders PFEIL_LINKS und PFEIL_HOCH, obwohl das in dem Programm an keiner Stelle so geschrieben ist. Da für Tastatur und Maus eine gemeinsame Klasse besteht werden 2 Objekte daraus erzeugt. Eine für Tastatur und eine für die Maus. zudem habe ich beides mit exklusievrechten initialisiert um anderen Problemen aus dem Weg zu geben.
Der Code für die mausabfrage ist:
Code:

int CInputManager::getMouseInput(void)
{
    DWORD NumElements = MOUSE_CHECKS;
    DIDEVICEOBJECTDATA data[MOUSE_CHECKS];
    ZeroMemory(&data,sizeof(data[0]));

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

    // MousDatan auf den Ursprung setzen
   int MouseInput = 0;
   m_MouseData.x = 0;
   m_MouseData.y = 0;
   m_MouseData.Button0 = FALSE;

    for(int c = 0; c < MOUSE_CHECKS; c++)
   {
      //int Movement = data[c].dwData;
         
       // bestimmen, in welche Richtung die Mouse bewegt wurde
       // und ob eine Mouse-Taste gedrückt wurde
       if(data[c].dwOfs == DIMOFS_X)
       {
         m_MouseData.x += data[c].dwData;
               /*if(Movement < 0)
               {
                  m_MouseData.x -= 1 * m_MouseSpeed;
                   }
                   if(Movement > 0)
                   {
                       m_MouseData.x += 1 * m_MouseSpeed;
                   }*/
      }
   
       if(data[c].dwOfs ==  DIMOFS_Y)
      {
         m_MouseData.y += data[c].dwData;
                   /*if(Movement < 0)
                   {
                       m_MouseData.y -= 1 * m_MouseSpeed;
                   }
                   if(Movement > 0)
                   {
                       m_MouseData.y += 1 * m_MouseSpeed;
                   } */
      }
   
      if(data[c].dwOfs ==  DIMOFS_BUTTON0)
      {
                  m_MouseData.Button0 = TRUE;
      }
   }
   
    return MouseInput;
}

"return MouseInput;" wird nicht berücksichtigt und "m_MouseData" ist eine Struktur, deren Inhalt über eine gesonderte Funktion zurückgegeben wird.
Hat jemand eine Idee was hieran nicht stimmt oder woran es liegen könnte?

edit by miracleboy: hab code tags eingefügt!Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 20.08.2004, 15:01    Titel: Antworten mit Zitat

Der code ist ohne [code]-tags zimlich schwer zu lesen.
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 20.08.2004, 18:21    Titel: Antworten mit Zitat

Sorry wusste nicht wie das geht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 22.08.2004, 13:38    Titel: Antworten mit Zitat

Kann bitte jemand bei dem die Maus funktioniert den nötigen code Posten? Bin echt verzweifelt. Das Problem habe ich übrigens nur wenn ich Maus und Tastatur über Direct Input anspreche.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 22.08.2004, 16:04    Titel: Antworten mit Zitat

irgendwie schaut die mausabfrage bei mir überhaupt ganz anders aus:
Code:

DIMOUSESTATE2 dims;
m_lpDIMouse->GetDeviceState(sizeof(DIMOUSESTATE2), &dims);

float relX = dims.lX;
float relY = dims.lY;


oder sieht es wie bei dir aus, wenn man gebuffert einliest? ich würds jedenfalls ungebuffert machen und mir halt die letzten 10 werte 'manuell' merken.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 22.08.2004, 17:15    Titel: Antworten mit Zitat

Ich glaube nicht das es an dem codefragment liegt den du gepostet hast, sondern eher mir der verarbeitung danach.
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 22.08.2004, 18:08    Titel: Antworten mit Zitat

Erstmal danke für eure Beiträge,
die andere abfrage läuft bei mir gar nicht aber ich hab die lösung hier im forum zu einem anderen Thema gefunden. Es lag daran das im Debug Modus auch bei DirectX alles mit 0 initialisiert wird.

Falls noch jemand das Problem hatte hier ist die änderung:

// MOUSE_CHECKS steht nur für eine Zahl
DIDEVICEOBJECTDATA data[MOUSE_CHECKS];

muss in

DIDEVICEOBJECTDATA data[MOUSE_CHECKS] = {0,0,0,0};

geändert werden dann funktioniert es auch in der Retail version
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 -> Fragen, Antworten und Kritik 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