JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

DirectInput - Absolute Mausposition abfragen
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 04.08.2003, 22:22    Titel: DirectInput - Absolute Mausposition abfragen Antworten mit Zitat

Hi!

Wie kann ich mit DirectInput die absolute Mausposition abfragen? Im Buch steht nur, wie man die relative Mausposition bekommt. Oder wie kann ich die Maus am Anfang auf eine bestimme Stelle mit DI setzen, um dann die absolute Position berechnen zu können?
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 10:28    Titel: Antworten mit Zitat

Normalerweise blendet man den normalen Windows-Cursor aus und erstellt seinen eigenen.

Das bedeutet du musst deine Maus (Cursor) selbst zeichnen.
Dann bestimmst du die Anfangskoordinaten und durch die Ermittlung der relativen Mausposition kannst du errechnen an welche Stelle du deinen Cursor als nächstes zeichnen musst. Wink


Es gibt allerdings eine API Funktion namens GetCursorPos die, die Position des Windows-Cursors ermittelt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 10:34    Titel: Antworten mit Zitat

Gibt's da auch ein kleines Tut oder so? Will mich eigentlich im Moment nicht so damit rumschlagen. Denn ich glaub nciht, dass man da nen Mauszeiger im bmp Format laden kann...
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 11:03    Titel: Antworten mit Zitat

Zitat:
Denn ich glaub nciht, dass man da nen Mauszeiger im bmp Format laden kann...


Doch. Das ist es ja! Mithilfe der errechneten Koordinaten zeichnet man zwei simple Polygone mit einer Cursor-Textur!
Oder wenn man DirectDraw benutzt ist es einfach eine Oberfläche deren Koordinaten bei jedem Schleifendurchlauf mithilfe der relativen Mausposition akzualisiert werden.

Der Cursor ist kein Windows-Desktop-Cursor mehr, sondern eine Oberfläche, die sich in Abhängigkeit der Mausbewegungen bewegt. Wink

Gute Tutorials findest du im DX9SDK
C:\DXSDK\Samples\C++\DirectInput

In den Beispielen Mouse und Scrawl wird sehr genau auf die Ermittlung der Maus-Ereignisse eingegangen

Das zeichnen der Oberfläche ist im Endeffekt ein Kinderspiel. Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
IO
Mini JLI'ler



Anmeldedatum: 02.08.2003
Beiträge: 21

Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 11:41    Titel: Antworten mit Zitat

Hi,
aber wenn ich z.B. ein Fensterprogramm machen will, ist es ja nicht praktisch, einen eigenen Cursor zu machen oder ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 11:50    Titel: Antworten mit Zitat

Muss es denn mit DI sein?
Das geht auch ganz gut mit dem WindowsMessageHandler.
WM_MOUSEMOVE
_________________
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
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 11:56    Titel: Antworten mit Zitat

Bitte jetzt nicht böse sein, wenn ich das jetzt sage, aber schreibt bitte nciht sowas, wenn ihr keine Ahnung davon habt. Es geht mit DirectInput, ich weiß zwar noch nciht genau wie, aber lest selber:

Zitat:

dwData
Data obtained from or sent to the device.
For axis input, if the device is in relative axis mode, then the relative axis motion is reported. If the device is in absolute axis mode, then the absolute axis coordinate is reported.

For button input, only the low byte of dwData is significant. The high bit of the low byte is set if the button went down; it is clear if the button went up.

_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 12:14    Titel: Antworten mit Zitat

@TheMillenium
Schön für dich!

Ach und, niemand hat behauptet man könnte nicht die absolute Position mit DInput ermitteln.
Ich hab' erklärt welche Methode man üblicherweise anwendet!
(Zumindest in Vollbildanwendungen mit D3D. Deshalb wird darauf ja auch im Buch eingegangen.)
Wir haben dir lediglich eine Hilfestellung zur Lösung deines Problems gegeben!

Aber offensichtlich hast du ja selber eine Lösung gefunden und bist nicht auf uns KeineAhnungHaber angewiesen. Wink
Im Mouse Tutorial von DXSDK 9 wird sowieso alles genau erklärt!

@IO
Ja stimmt. Für eine Fensteranwendung, die interaktiv mit der Windowsoberfläche zusammenarbeitet ist der normale Windows-Cursor natürlich praktischer. Smile

Und wie The Lord of Programming schon geagt hat.
Für eine Fensteranwendung ist DInput überflüssig!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 12:31    Titel: Antworten mit Zitat

Ich hab ja gesagt nicht böse werden...hier noch mal Entschuldigung!

Embarassed

Ich brauch das für mein Spiel und für mein Menü im Spiel...

also ich hab es jetzt "geschafft" absolute Positionen für die Maus zu empfangen, aber irgendwie hat ich was anders erwartet als eine 10-stellige Zahl. Ich hab aber gesehen, dass wenn ich auf eine bestimme Stelle gehe , davon wieder weg und wieder hin, hat sie dort immer die gleiche Zahl. Also ist die Position schon absolut, aber halt nicht z.B. auf x=300 sondern sagt dann x=1579547891

Für die, dies interessiert so macht man das, dass so hohe Werte rauskommen Wink
Code:

   DIProperties.dwData            = DIPROPAXISMODE_ABS;
   Object_lpDIDevice_Mouse->SetProperty(DIPROP_AXISMODE, &DIProperties.diph);

_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 18:09    Titel: Hmmm Antworten mit Zitat

Gleiches Problem hatte ich auch anfangs mit der Maus und DI.

1. Zur Fensteranwendung. Ich kann nur empfehlen Lordys (sorry Wink) Vorschlag anzunehmen. Die ganz normalen Maushandler sind am schnellsten und besten umzusetzen.

2. Millenium:
Das Problem liegt soweit ich das verfolgt hatte darin, dass du zwar die Absolute Position mit der Einstellung entgegen nehmen kannst, das aber noch lange nicht heißt, dass sie korrekt ist. Du MUSST mit DI den ShowCursor auf false setzen und den Zeiger selber blitten. Nur so bekommst du korrekte Ergebnisse. Alles andere ist verfaelscht weil DI nicht mit der Windowseigenen Mausbeschleunigung (speziell damit!) und Position umgehen kann. So weit mein Wissen... Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 19:01    Titel: Antworten mit Zitat

Du scheinst Recht zu haben! X-File woher du das wieder weißt? Wink

Ich hab sogar versucht erst per WindowsUserteil die richtige Mausposition zukriegen hat auch geklappt. Nur als ich dann von dem Wert die DInput Relation Werte genommen habe...naja hast halt nicht mehr gestimmt, ist wirklich bestimm wegen der Windows Beschleunigung...Sad

Also ich muss jetzt einfach die x und y Werte der Maus in zwei Variablen festlegen und immer dort nen Mauszeiger blitten und dann ändere ich die Mauskoordinaten mittels der DInput Relationswerte...naja und muss halt den echten Mauszeiger unsichtbar machen?
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 19:46    Titel: Antworten mit Zitat

Aber warum eigentlich die abs. Koordinaten abfragen? Wenn man die Deltas nimmt kann man die durch 'nen kleinen Algo jagen, der die Bewegung natürlicher und weicher aussehen lässt... nur'n Vorschlag. ;)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 20:05    Titel: Antworten mit Zitat

TheMillenium hat Folgendes geschrieben:
Ich hab ja gesagt nicht böse werden...hier noch mal Entschuldigung!

Okay, Entschuldigung angenommen Very Happy

Hoffe du kriegst noch die Lösung für dein Prob. !

@Hazel
Weich und natürlich hört sich gut an. (Wie Musik in meinen Ohren) Very Happy

Aber was meinst du mit Deltas ? Rolling Eyes
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 05.08.2003, 20:55    Titel: Antworten mit Zitat

Genau hab jetzt am Anfang, nachdem ich alle initialisiert hab den Zeiger auf (0,0) gesetzt und dann:
Code:

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

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


x und y sind global.

dann blitte ich das Teil:
Code:

rect.top      =   y+100;
   rect.left      =   x+100;
   rect.bottom      =   y+200;
   rect.right      =   x+200;
   Device()->StretchRect(MOUSE,NULL,Buffer(),&rect,D3DTEXF_NONE);


aber die Bewegung kommt wirklich ziemlich klumpig vor und das ist noch weit untertrieben!!! Sad
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 13:21    Titel: Antworten mit Zitat

Hazel hat Folgendes geschrieben:
Aber warum eigentlich die abs. Koordinaten abfragen? Wenn man die Deltas nimmt kann man die durch 'nen kleinen Algo jagen, der die Bewegung natürlicher und weicher aussehen lässt... nur'n Vorschlag. Wink


Kannst du bitte mal erklären was Deltas sind und meinst du das von der Physik den Unterschied von zwei Werten? Und kannst du uns mal den Algo geben?


Wie habt ihr den das jetzt realisiert den mein Mauszeiger bewegt sich nicht gescheit in die Richtung der krachselt dann etwas an der y-Achse entlang und dann macht er einen kurvensprung zur x-Achse...
_________________
The source of all power is in its destiny...
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 1, 2  Weiter
Seite 1 von 2

 
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