Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 04.08.2003, 22:22 Titel: DirectInput - Absolute Mausposition abfragen |
|
|
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 |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 05.08.2003, 10:28 Titel: |
|
|
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.
Es gibt allerdings eine API Funktion namens GetCursorPos die, die Position des Windows-Cursors ermittelt. |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 05.08.2003, 10:34 Titel: |
|
|
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 |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 05.08.2003, 11:03 Titel: |
|
|
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.
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. |
|
Nach oben |
|
|
IO Mini JLI'ler
Anmeldedatum: 02.08.2003 Beiträge: 21
Medaillen: Keine
|
Verfasst am: 05.08.2003, 11:41 Titel: |
|
|
Hi,
aber wenn ich z.B. ein Fensterprogramm machen will, ist es ja nicht praktisch, einen eigenen Cursor zu machen oder ? |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 05.08.2003, 11:50 Titel: |
|
|
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 |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 05.08.2003, 11:56 Titel: |
|
|
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 |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 05.08.2003, 12:14 Titel: |
|
|
@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.
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.
Und wie The Lord of Programming schon geagt hat.
Für eine Fensteranwendung ist DInput überflüssig! |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 05.08.2003, 12:31 Titel: |
|
|
Ich hab ja gesagt nicht böse werden...hier noch mal Entschuldigung!
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
Code: |
DIProperties.dwData = DIPROPAXISMODE_ABS;
Object_lpDIDevice_Mouse->SetProperty(DIPROP_AXISMODE, &DIProperties.diph);
|
_________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 05.08.2003, 18:09 Titel: Hmmm |
|
|
Gleiches Problem hatte ich auch anfangs mit der Maus und DI.
1. Zur Fensteranwendung. Ich kann nur empfehlen Lordys (sorry ) 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... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 05.08.2003, 19:01 Titel: |
|
|
Du scheinst Recht zu haben! X-File woher du das wieder weißt?
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...
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 05.08.2003, 19:46 Titel: |
|
|
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 |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 05.08.2003, 20:05 Titel: |
|
|
TheMillenium hat Folgendes geschrieben: | Ich hab ja gesagt nicht böse werden...hier noch mal Entschuldigung! |
Okay, Entschuldigung angenommen
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)
Aber was meinst du mit Deltas ? |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 05.08.2003, 20:55 Titel: |
|
|
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!!! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 06.08.2003, 13:21 Titel: |
|
|
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. |
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 |
|
|
|