JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

MousePosition
Gehe zu Seite Zurück  1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 24.03.2003, 16:25    Titel: Antworten mit Zitat

Geht es nicht einfach das man es wie beim GDI macht???

Code:

MouseX = LOWORD;
MouseY = HIWORD;


Muss man das bei DInput so kompliziert machen oder gibt es auch eine GDI ähnliche Lösung???
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 27.03.2003, 16:51    Titel: Antworten mit Zitat

AFAIK geht des net so einfach mit DirectInput. Des hat viel mehr Funktionen und isch deshalb wohl auch komplizierter. Kann gut sein, dass man mit den DirectInputfunktionen genauere Werte erzielen kann, als mit LOWORD/HIWORD; z.B. das die Maus nur um einen halben Pixel verschoben wurde Question Vielleicht ist der Aufbau der Funktion auch wichtig für andere Faktoren bei Mauseingaben(Force-Feedback, Polling, etc...) Question

Du musst übrigens schreiben:
Code:
MouseX=LOWORD(lParam);
MouseY=HIWORD(lParam);

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 27.03.2003, 17:09    Titel: Antworten mit Zitat

Ich habs mal so ähnlich wie im Buch probiert, das er zuerst bestimmte Mauswerte hat, an diese habe ich am Anfang auch die Maus mit:

Code:
SetCursorPos(x,y);


gesetzt. Jetzt hab ich das so gemacht das er immer die Daten neu kriegt:

Code:
switch(data.dwOfs)
{
          case DIMOFS_X:
   m_iMouseX += data.dwData;
   break;

          case DIMOFS_Y:
   m_iMouseY += data.dwData;
   break;
}

Das Problem ist bloß, das wenn ich die Werte jetzt per GDI ausgeben lassen will er das nie aktualisiert. Weiß einer woran das liegen könnte???
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 27.03.2003, 19:03    Titel: Antworten mit Zitat

Gibst du m_iMouseX aus oder data.dwData aus?
data.dwData enthält nämlich nur die Veränderung der MausKoordinaten.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 28.03.2003, 13:46    Titel: Antworten mit Zitat

Nun m_iMouseX ist die Variable die ich später am Blidschirm haben will.
Und ist am Anfang auf 400.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 28.03.2003, 14:04    Titel: Antworten mit Zitat

Poste mal den Quellcode, mit dem du die Position aktualisierst.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 16:22    Titel: Antworten mit Zitat

Aktualisierungsfunktion:

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

   if(FAILED(lpDIMouse->GetDeviceData(sizeof(data),
                                                                        &data,
                                                                        &NumElements,
                                                                        0)))
   {
      lpDIMouse->Acquire();
      return;
   }

   switch(data.dwOfs)
   {
                        case DIMOFS_X:
      m_iMouseX += data.dwData;
      break;

           case DIMOFS_Y:
      m_iMouseY += data.dwData;
      break;

           case DIMOFS_BUTTON0:
      if(data.dwData)
      {
         m_bButton0 = true;
      }
      else
      {
         m_bButton0 = false;
      }
      break;

           case DIMOFS_BUTTON1:
      if(data.dwData)
      {
         m_bButton1 = true;
      }
      else
      {
         m_bButton1 = false;
      }
      break;
              }
}


Die Variablen m_iMouseY, m_iMouseX, m_bButton0 und m_bButton1 sind global dekleniert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 16:24    Titel: Antworten mit Zitat

Ach ja, die Variablen hol ich mir dann mit der Funktion:

Code:
int GetMouseX(void) { return m_iMouseX; }


in die Maindatei.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 17:21    Titel: Antworten mit Zitat

Hmm...
ich kann in deinem Code keinen Fehler entdecken. Aber versuch doch mal zu prüfen, ob der Fall data.dwOfs==DIMOFS_X oder data.dwOfs==DIMOFS_Y überhaupt auftritt.
z.B.
Code:
case DIMOFS_X:
m_iMouseX += data.dwData;
PostQuitMessage(0);
//Falls Objekte nicht im Destruktor freigegeben werden,
//hier manuell freigeben
break;

^^Das könnte nämlich sein, da die Funktion immer nur den ersten Eintrag aus dem Puffer liest(s.S.365) Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

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

Hmm, stimmt, der nimmt den Mauszeiger gar nicht wahr, der Test mit der PostQuitMessage(0) hat aufjeden FAll nicht funktioniert. Aber was muss man da machen, damit es funktioniert??
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 20:43    Titel: Antworten mit Zitat

Mir is noch was aufgefallen!
Prüf doch mal an der Stelle(bzw. nach der Stelle):
Code:
if(FAILED(lpDIMouse->GetDeviceData(sizeof(data),
                                   &data,
                                   &NumElements,
                                   0)))
{
    lpDIMouse->Acquire();
    return;
}

Es könnte nämlich auch sein, dass GetDeviceData fehlgeschlagen ist und dass die Funktion durch return wieder verlassen wird. So wird die switch-Anweisung garnich erst ausgeführt.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 30.03.2003, 09:46    Titel: Antworten mit Zitat

Ich hab des jetzt mal so getestet:

Code:

if(FAILED(lpDIMouse->GetDeviceData(sizeof(data),
                                                        &data,                           &NumElements, 0)))
               {
      lpDIMouse->Acquire();
      PostQuitMessage(0);
   }


Aber er beendet das Programm nicht, was ja eigentlich heißen sollte das es funktioniert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 30.03.2003, 10:06    Titel: Antworten mit Zitat

Ja, eigentlich schon. Es könnte vielleicht sein, dass etwas an der Initialisierung von DirectInput nicht stimmt. Poste mal den Code.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 47
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 30.03.2003, 11:16    Titel: Antworten mit Zitat

Das Problem ist doch immer noch, dass die Werte nicht aktualisiert ausgegeben werden, oder? Sorgst du denn dafür, dass der Fensterinhalt neu gezeichnet wird?

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

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

Klar lass ich den Fensterinhalt aktualisieren, ich hab nämlich auch ein Bild das ich per Tastatur bewegen kann, und da wird die alte Position ja auch gelöscht. Mein Initialisierungscode:

Code:

//DInputCreate
if(FAILED(DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8,(void**)&lpDI,NULL)))
    {
        return Error("Fehler beim Anlegen des DirectInput8-Objekts");
    }

//Mausinitialisierung
if(FAILED(lpDI->CreateDevice(GUID_SysMouse, &lpDIMouse, NULL)))
   {
      return Error("Fehler beim Anlegen des Maus-Devices!");
   }

   if(FAILED(lpDIMouse->SetDataFormat(&c_dfDIMouse)))
   {
      return Error("Fehler beim Setzen des Datenformats!");
   }

   if(FAILED(lpDIMouse->SetCooperativeLevel(hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE)))
   {
      return Error("Fehler beim Setzen der Kooperationsebene!");
   }

   DIPROPDWORD DIProperties;

   ZeroMemory(&DIProperties, sizeof(DIProperties));
   DIProperties.diph.dwSize       = sizeof(DIPROPDWORD);
   DIProperties.diph.dwHeaderSize = sizeof(DIPROPHEADER);

   DIProperties.diph.dwObj        = 0;
   DIProperties.diph.dwHow        = DIPH_DEVICE;

   DIProperties.dwData            = 16;

   lpDIMouse->SetProperty(DIPROP_BUFFERSIZE,        &DIProperties.diph);

   lpDIMouse->Acquire();
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
Gehe zu Seite Zurück  1, 2, 3  Weiter
Seite 2 von 3

 
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