Maus-Koordinaten
-
Hallo!
Hab mal ne kurze Frage:
Sind die Maus-Koordinaten im Vollbildmodus anders als im FEnstermodus?Weil, wenn ich mein Menu im Fenstermodus starte, klappt alles ganz prima.
Nur, im vollbildmodus, da klappt es +berhaupt nch mehr mit den koordinaten. Wen ich die Abfrage rauslasse, ob der zeiger auf dem Button ist, und nur teste, ob die maus gedrückt odernicht gedrückt wurde, dann klappts beim drücken. aber nich mit der kollisionsabfrage.
-
Wie fragst du denn die Koordinaten ab?
cya
-
Tja, so genau kann ich es nich beschreiben. benutze den gamecore aus dem Buch prgrammng roleplaying games with directX
Naja, ich versuchs:
//Hier ist der CreateCode, wie er aufgerufen wird aus meiner Function: m_Mouse.Create(&m_Input, MOUSE, WINDOWED); //Und hier die Funktion Create...: BOOL cInputDevice::Create(cInput *Input, short Type, BOOL Windowed) { DIDATAFORMAT *DataFormat; DIPROPRANGE DIprg; DIPROPDWORD DIpdw; // Free a prior device Free(); // Check for a valid parent cInput class if((m_Input = Input) == NULL) return FALSE; // Create the device and remember device data format switch(Type) { case KEYBOARD: //... case MOUSE: if(FAILED(m_Input->GetDirectInputCOM()->CreateDevice(GUID_SysMouse, &m_pDIDevice, NULL))) return FALSE; DataFormat = (DIDATAFORMAT*)&c_dfDIMouse; break; case JOYSTICK: //... default: return FALSE; } // Set the windowed usage m_Windowed = Windowed; // Set the cooperative level - Foreground & Nonexclusive if(FAILED(m_pDIDevice->SetCooperativeLevel(m_Input->GethWnd(), DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) return FALSE; // Set the special properties if it's a joystick if(Type == JOYSTICK) { //... } // Acquire the device for use if(FAILED(m_pDIDevice->Acquire())) return FALSE; // Set the device type m_Type = Type; // Clear the device information Clear(); // Return a success return FALSE; } // Dann kommt das lesen: BOOL cInputDevice::Read() { HRESULT hr; long BufferSizes[3] = { 256, sizeof(DIMOUSESTATE), sizeof(DIJOYSTATE) }; short i; // Make sure to have a valid IDirectInputDevice8 object if(m_pDIDevice == NULL) return FALSE; // Make sure device type if in range if(m_Type < 1 || m_Type > 3) return FALSE; // Loop polling and reading until succeeded or unknown error // Also take care of lost-focus problems while(1) { // Poll m_pDIDevice->Poll(); // Read in state if(SUCCEEDED(hr = m_pDIDevice->GetDeviceState(BufferSizes[m_Type-1], (LPVOID)&m_State))) break; // Return on an unknown error if(hr != DIERR_INPUTLOST && hr != DIERR_NOTACQUIRED) return FALSE; // Reacquire and try again if(FAILED(m_pDIDevice->Acquire())) return FALSE; } // Since only the mouse coordinates are relative, you'll // have to deal with them now if(m_Type == MOUSE) { // If windowed usage, ask windows for coordinates if(m_Windowed == TRUE) { POINT pt; GetCursorPos(&pt); ScreenToClient(m_Input->GethWnd(), &pt); m_XPos = pt.x; m_YPos = pt.y; } else { m_XPos += m_MouseState->lX; m_YPos += m_MouseState->lY; } } // Released keys and button need to be unlocked switch(m_Type) { case KEYBOARD: for(i=0;i<256;i++) { if(!(m_State[i] & 0x80)) m_Locks[i] = FALSE; } break; case MOUSE: for(i=0;i<4;i++) { if(!(m_MouseState->rgbButtons[i])) m_Locks[i] = FALSE; } break; case JOYSTICK: for(i=0;i<32;i++) { if(!(m_JoystickState->rgbButtons[i])) m_Locks[i] = FALSE; } break; } // return a success return TRUE; } // Und dann híer das auslesen: long cInputDevice::GetXPos() { // Update coordinates if a joystick if(m_Type == JOYSTICK) m_XPos = m_JoystickState->lX; return m_XPos; }
Kannst du mir jetzt helfen?
-
Lass die Umrechnung ScreenToClient mal weg...
cya
-
Das funzt net.
Es geht ja auchg um den Vollbildmodus. Im Fenstermodus geht es ja einwandfrei.
-
Original erstellt von Maxi:
**
m_Mouse.Create(&m_Input, MOUSE, WINDOWED);
**Hast Du den letzten Parameter auch verändert wo Du es im Vollbild hast laufen lassen? Könnte ja sein
-
Normalerweise kann es kein Problem geben, wenn man den Mauszieger an dieselben Koordinaten zeichnet, die man für die Abfragen benutzt.
-
Jetzt mach mal hier keine Crossposts, sondern lies was ich schrieb. Das _kann_ doch überhaupt nicht schiefgehen. Wenn ich an (100,100) male, egal wo die Koordinaten her sind, dann ist der Mauscursor auch da, und wenn der Button auch bei 100,100 ist, dann muss der Mauszeiger auch darauf gezeichnet werden.