JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Mausproblem
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
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 22.04.2004, 21:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 22.04.2004, 21:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 22.04.2004, 22:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
todesgilde
Mini JLI'ler



Anmeldedatum: 16.04.2004
Beiträge: 15
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 23.04.2004, 12:32    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
todesgilde
Mini JLI'ler



Anmeldedatum: 16.04.2004
Beiträge: 15
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 23.04.2004, 17:55    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 23.04.2004, 19:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
todesgilde
Mini JLI'ler



Anmeldedatum: 16.04.2004
Beiträge: 15
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 24.04.2004, 17:23    Titel: Antworten mit Zitat

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?
Code:
rgbButtons[0]==1

_________________
Constantinidis Craven alias DER HEXER

Es ist nicht tot,
was ewig lebt,
bis das der Tod
die Zeit besiegt.

Constantin
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

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

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 25.04.2004, 19:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
todesgilde
Mini JLI'ler



Anmeldedatum: 16.04.2004
Beiträge: 15
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 25.04.2004, 22:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 25.04.2004, 23:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
todesgilde
Mini JLI'ler



Anmeldedatum: 16.04.2004
Beiträge: 15
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 27.04.2004, 08:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 27.04.2004, 13:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
todesgilde
Mini JLI'ler



Anmeldedatum: 16.04.2004
Beiträge: 15
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 27.04.2004, 20:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 27.04.2004, 20:50    Titel: Antworten mit Zitat

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
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