Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 22.04.2004, 21:42 Titel: |
|
|
Mir fällt keine andere Lösung ein, als den Mauszeiger auf die Grnzen zu setzten, wenn er drüber geht.
Du kannst ja schließlich nicht verhindern, das derUser die Maus bewegt!
"Aber dann bewegt er sich und ist noch nicht im Bildschirm, aber die Koordinaten werden schon wieder verändert.
Versteht ihr was ich meine. "
Nein. Nach der Methode mit dem Setzten auf die Grenzen, funktioniert normalerweise alles.
Ich find DeviceState() besser weil man da nicht umständlich den Puffer auslesen muss. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 22.04.2004, 21:53 Titel: |
|
|
Code: |
//Die Maus aktualiesieren
if(FAILED(m_lpDIMouse->GetDeviceState(sizeof(m_Mousestate), &m_Mousestate)))
{
m_lpDIMouse->Acquire();
m_lpDIMouse->GetDeviceState(sizeof(m_Mousestate), &m_Mousestate);
}
m_CursorXPos+=m_Mousestate.lX*m_CursorSpeed;
m_CursorYPos+=m_Mousestate.lY*m_CursorSpeed;
if(m_CursorXPos<0)
{
m_CursorXPos=0;
}
if(m_CursorXPos>SCR_WIDTH)
{
m_CursorXPos=SCR_WIDTH;
}
if(m_CursorYPos<0)
{
m_CursorYPos=0;
}
if(m_CursorYPos>SCR_HEIGHT)
{
m_CursorYPos=SCR_HEIGHT;
}
|
Du solltest keine Probleme haben, den Code zu verstehn. Mit ihm hast du einen wunderbaren Cursor, den du nur noch an m_CurosrXPos, m_CursorYPos anzeigen musst.
Damit sollte dein Problem iegentlich geklärt sein... _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 22.04.2004, 22:00 Titel: |
|
|
Ich glaube er arbeitet im Fenstermodus. Da musser das mit dem Set und GetCursorPos natürlich ein wenig anders machen, weiss zwar nicht ganau was aber ich rate mal das es etwas mit ScreenToClient(...) zu tun haben könnte. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
todesgilde Mini JLI'ler
Anmeldedatum: 16.04.2004 Beiträge: 15 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 23.04.2004, 12:32 Titel: |
|
|
Also ich werde es heute mal probieren und dann mich nochmal melden.
Und zur Info, ich arbeite im Vollbild Modus.
Ciao _________________ Constantinidis Craven alias DER HEXER
Es ist nicht tot,
was ewig lebt,
bis das der Tod
die Zeit besiegt.
Constantin |
|
Nach oben |
|
 |
todesgilde Mini JLI'ler
Anmeldedatum: 16.04.2004 Beiträge: 15 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 23.04.2004, 17:55 Titel: |
|
|
@Jonathan_Klein:
Welches Format hat den die Variable m_MouesState?
Auch DIDEVICEOBJECTDATA? _________________ Constantinidis Craven alias DER HEXER
Es ist nicht tot,
was ewig lebt,
bis das der Tod
die Zeit besiegt.
Constantin |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 23.04.2004, 19:36 Titel: |
|
|
Ok, ich habs vergessen dazu zu schreiben. Aber du hättest auch alleine drauf kommen können:
DirectX Dokumentation
Suchen
"GetDeviceState"
IDirectInputDevice8::GetDeviceState Method
Code: |
Remarks
Before device data can be obtained, set the cooperative level by using the IDirectInputDevice8::SetCooperativeLevel method, then set the data format by using IDirectInputDevice8::SetDataFormat, and acquire the device by using the IDirectInputDevice8::Acquire method.
The five predefined data formats require corresponding device state structures according to the following table:
Data format State structure
c_dfDIMouse DIMOUSESTATE
c_dfDIMouse2 DIMOUSESTATE2
c_dfDIKeyboard array of 256 bytes
c_dfDIJoystick DIJOYSTATE
c_dfDIJoystick2 DIJOYSTATE2
For example, if you passed the c_dfDIMouse format to the IDirectInputDevice8::SetDataFormat method, you must pass a DIMOUSESTATE structure to the IDirectInputDevice8::GetDeviceState method.
|
Und was haben wir als Datenformat bei der Initialisierung eingestellt?
c_dfDIMouse.
Der gesucht Typ lautet also:
DIMOUSESTATE m_Mousestate; _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
todesgilde Mini JLI'ler
Anmeldedatum: 16.04.2004 Beiträge: 15 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 24.04.2004, 17:23 Titel: |
|
|
Also ich habe dass jetzt alles so gemacht, aber trotzdem muss ich SetCursorPos benutzen, denn ansonsten, bewegt sich der Cursor schneller, aber die absoluten Koordinaten hinken nach.
Ist er zum Beispiel eigentlich bei X = 1024 sind die absoluten Koordinaten erst bei 800.
Wenn ich aber SetCursorPos nach jeden Mausabfragen, dann klappt es, aber es stockt.
So dann habe ich rausgefunden, dass man man mit SetPropertie das Format umstellen kann von Relativen Koordinaten auf Absolute, ab das habe ich gemacht und trotzdem macht er es nicht?
Kann mir jemand sagen, was ich dort beachten muss.
und noch ne Frage, wie erfrage ich ob ein Button der Maus gedrückt wurde?
rgbButtons[0] für Linke Maustaste muss gleich 1 sein?
_________________ Constantinidis Craven alias DER HEXER
Es ist nicht tot,
was ewig lebt,
bis das der Tod
die Zeit besiegt.
Constantin |
|
Nach oben |
|
 |
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 24.04.2004, 21:18 Titel: |
|
|
Code: |
if (m_dims.rgbButtons[0] & 0x80)
.
.
|
sag uns doch jetzt mal klar und deutlich, was du machen willst...
hast du einen eigenen mauszeiger(grafik) oder benutzt du den standard-cursor? |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 25.04.2004, 19:44 Titel: |
|
|
Dasd der Direckt X Cursor nicht mit dem Windows Cursor übereinstimmt ist klar. Du must den Windows Cursor ausblenden (ShowCursor(false)) und als Sprite deinen eigenen anzeigen.
SetCursorPos() hab ich nie benttz und wüsste cht nicht wofür ichs brauchen sollte _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
todesgilde Mini JLI'ler
Anmeldedatum: 16.04.2004 Beiträge: 15 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 25.04.2004, 22:25 Titel: |
|
|
ja das mit dem Cursor blitten und dem eigenen Bild ist ja klar, aber ich habe das Problem, wenn ich nicht die Funktion SetCursorPos benutze, dass der Cursor zum Beispiel schon am Rand des Bildschirms ist und die Koordinaten aber anzeigen, dass er erst bei 800 ist.
Ich habe auch noch heraus gefunden, dass man SetProperties die Koordinaten Art auf absolute stellen kann, aber bei mir klappt es irgendwie trotzdem nicht, kann das mal jemand überprüfen?
Ciao _________________ Constantinidis Craven alias DER HEXER
Es ist nicht tot,
was ewig lebt,
bis das der Tod
die Zeit besiegt.
Constantin |
|
Nach oben |
|
 |
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 25.04.2004, 23:20 Titel: |
|
|
o mann, obwohl du mich ständig ignorierst und immer noch nicht rausgerückt hast, was du eigentlich genau machen willst, sag ich dir jetzt zum letzten mal: SetCursorPos() brauchst du nicht, böse funktion, finger weg, pfui, pfui.
ich nehm jetzt mal an, du willst einen eigenen mauszeiger anzeigen, so könnte das eventuell aussehen:
Code: |
// init
scr_width = 800;
scr_height = 600;
mouseX = 0;
mouseY = 0;
bild.SetPos(0, 0); // das is der zeiger
// in der schleife
offsetX = dims.lX * 20 * fTime; // wie auch immer...
offsetY = dims.lY * 20 * fTime;
mouseX += offsetX;
mouseY += offsetY;
if (mouseX > 800)
mouseX = 800;
else if (mouseX < 0)
mouseX = 0;
// dasselbe für mouseY
.
.
// neue position setzen
bild.SetPos(mouseX, mouseY);
|
...irgendwie so. |
|
Nach oben |
|
 |
todesgilde Mini JLI'ler
Anmeldedatum: 16.04.2004 Beiträge: 15 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 27.04.2004, 08:09 Titel: |
|
|
also, ich habe das nun langsam kapiert wie ich mir meinen eigenen Cursor mache und das war auch garnicht meine frage, sondern wenn ich es so mache wie ihr es beschreibt, dann hängt mein Cursor zum Beispiel am Rand des Bildschirms ( 1024, y) und die absoluten Koordinaten spucken dann zum Beispiel denn Wert (950,y).
Und das liegt nicht daran, dass ich die Variablen falsch initialisiert habe.
Du hast in deinem Quelltext geschrieben:
Code: |
offsetX = dims.lX * 20 * fTime; // wie auch immer...
offsetY = dims.lY * 20 * fTime;
|
Steht dabei fTime für FramTime und kann es daran liegen, dass der Cursor viel weiter ist, als die absoluten Koordinaten?
Versteht ihr jetzt endlich mein Problem? _________________ Constantinidis Craven alias DER HEXER
Es ist nicht tot,
was ewig lebt,
bis das der Tod
die Zeit besiegt.
Constantin |
|
Nach oben |
|
 |
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 27.04.2004, 13:07 Titel: |
|
|
du kannst nicht mit DInput und den absoluten koordinaten von windows arbeiten...das is klar, dass es nicht funkt.
entweder du machst es so, wie ich im code, dann kommen die absoluten koordinaten immer von der position deines mouszeigers...oder du holst dir mit GetCursorPos() und ClientToScreen() die koordinaten des windows-zeigers und positionierst dort deinen custom-zeiger. beides zusammen kann nicht gutgehen. |
|
Nach oben |
|
 |
todesgilde Mini JLI'ler
Anmeldedatum: 16.04.2004 Beiträge: 15 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 27.04.2004, 20:17 Titel: |
|
|
ich setze am Anfang mein Cursor auf Null Null und initialisiere auch so meine Koordinaten.
Dann arbeite ich nur mir DI bis auf die Stelle, wo ich die neuen Veränderungen auf meine Variablen draufaddiere und dann mit SetCursorPos die Position des Cursor setze, mach ich das nicht, tritt der besagte Effekt in Kraft. _________________ Constantinidis Craven alias DER HEXER
Es ist nicht tot,
was ewig lebt,
bis das der Tod
die Zeit besiegt.
Constantin |
|
Nach oben |
|
 |
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 27.04.2004, 20:50 Titel: |
|
|
entweder du willst nicht verstehen, oder lies dir den thread nochmal durch und wenn dus dann nicht kapierst, wart noch ein paar jahre oder such dir ein anderes hobby...sry.
WIE soll SetCursorPos() irgendeinen effekt haben, wenn du einen eigenen mauszeiger hast und den windows-zeiger versteckst?? diese funktion positioniert den windows-zeiger, wenn du mit eigenem zeiger und DI arbeitest kannst du alle windows-funktionen vergessen. DU bestimmst wo der zeiger in jedem frame ist, DU mußt dafür sorgen, dass er auf der seite nicht rausfährt, und somit weißt immer DU die absoluten koordinaten DEINES zeigers und nicht windows. |
|
Nach oben |
|
 |
|