Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Asto JLI'ler
Alter: 37 Anmeldedatum: 30.05.2007 Beiträge: 114 Wohnort: Dortmund Medaillen: Keine
|
Verfasst am: 31.05.2007, 13:38 Titel: Menü in DX9 |
|
|
Gibt es eigentlich eine einfache Möglichkeit, zu überprüfen ob die Maus über einem bestimmten Surface liegt, um ein Menü zu realisieren?
Okay, wäre komfort... und das in C++... *gg*
Oder muss man überprüfen, ob die maus X, Y Koordinaten in einem bestimmten Bereich liegen (Dem Rechteck des Surfaces)? _________________ "A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Zuletzt bearbeitet von Asto am 03.06.2007, 10:53, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 31.05.2007, 13:56 Titel: |
|
|
Soviel ich weiß muss man das selber ausrechnen ist aber nicht so schwer. Wenn dus öfter brauchst, kannst du ja ne kleine Funktion schreiben die das für dich über nimmt:
CPP: | BOOL IsMouseInRect(D3DXVECTOR2 mousePosition, RECT rect) {
return (mousePosition.x < rect.right && mousePosition.x > rect.left && mousePosition.y < rect.bottom && mousePosition.y > rect.top);
} |
|
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 31.05.2007, 15:44 Titel: |
|
|
Die Mausposition relativ zur inneren rechten oberen Ecke kannst du dir mit GetCursorPos(...) und GetClientRect(...) holen. Um mal Otscho's Code ein bisschen zu erweitern könnte das dann so aussehen:
CPP: | bool IsMouseInRect(HWND hWnd,RECT Rectangle){
POINT MousePosition;
GetCursorPos(&MousePosition);
RECT WindowClientArea;
GetClientRect(hWnd,&WindowClientArea);
MousePosition.x-=WindowClientArea.left;
MousePosition.y-=WindowClientArea.top;
return (MousePosition.x < Rectangle.right && MousePosition.x > Rectangle.left && MousePosition.y < Rectangle.bottom && MousePosition.y > Rectangle.top);
} |
Edit:
Hab's GreatFlos Hinweis entsprechend korrigiert. _________________
Ich bin da, wer noch?
Zuletzt bearbeitet von Dr. Best am 31.05.2007, 17:39, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Asto JLI'ler
Alter: 37 Anmeldedatum: 30.05.2007 Beiträge: 114 Wohnort: Dortmund Medaillen: Keine
|
Verfasst am: 31.05.2007, 16:05 Titel: |
|
|
hmm vielen Dank Otscho
und danke Dr. Best für die Arbeit, macht die Funktion etwas bequemer
Aber ich korrigiere mal fix n Flüchtigkeitsfehler:
CPP: | GetClientRect(HWND,&WindowClientArea); |
muss CPP: | GetClientRect(hWnd,&WindowClientArea); |
lauten :X
Danke! _________________ "A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt |
|
Nach oben |
|
|
Asto JLI'ler
Alter: 37 Anmeldedatum: 30.05.2007 Beiträge: 114 Wohnort: Dortmund Medaillen: Keine
|
Verfasst am: 27.06.2007, 15:51 Titel: |
|
|
Um nochmal das Thema aufzugreifen:
Ich brauch die Maus eigentlich nur für Menüs. Ist es somit performance-technisch sinnvoll, per DInput die "Mauseingaben" zu überprüfen, oder reicht für Menüs die einfache Nachrichtenschleife? _________________ "A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 27.06.2007, 16:05 Titel: |
|
|
DirectInput für Mauseingaben ist ziemlich bähh.
Für ein einfaches Menü tuts normal schon die Nachrichtenschleife.
Slider oder so könnten da allerdings schon schwieriger werden. |
|
Nach oben |
|
|
Asto JLI'ler
Alter: 37 Anmeldedatum: 30.05.2007 Beiträge: 114 Wohnort: Dortmund Medaillen: Keine
|
Verfasst am: 27.06.2007, 16:11 Titel: |
|
|
Otscho hat Folgendes geschrieben: | DirectInput für Mauseingaben ist ziemlich bähh. |
Genau das dachte ich mir auch *gg* Zumindest ist es recht umständlich.
Ich muss halt nur Mausklicks verarbeiten und wenn ich mal einen Slider nutzen wollen sollte (z.B. bei den Optionen), dann kann man das ja auch lösen, in dem man links und rechts davon n pfeil macht, den man anklicken muss, also nix mit sliden
Nur die Nachrichtenschleife ist deutlich langsamer als DInput oder? _________________ "A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 27.06.2007, 17:22 Titel: |
|
|
GreatFlo hat Folgendes geschrieben: |
Nur die Nachrichtenschleife ist deutlich langsamer als DInput oder? |
Kann man so nicht sagen. Windows verschickt ja jede Sekunde wer weiß wie viele Nachrichten. Performacetechnisch sollte das also keinen Unterschied machen, allerdings haben manche Nachrichtne nicht eine so hohe Priorität und so. Daher ist man bei Egoshootern mit Dinput gut beraten, für Strategiespiele ist aber das Windowsnachrichtensystem sicherlich vollkommen in Ordnung. Achja: Zeichnet man den Mauszeiger selber, kann er bei wenig fps anfangen zu stocken, oder zäh sein. Der Windowszeiger wird das i.d.R. nicht. Das kann auch manchmal ein Vorteil sein. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 29.06.2007, 13:50 Titel: |
|
|
eigtl ist alles gesagt, aber ich muss trotzdem nochmal meinen senf dazu geben (jetzt wo ich aus nem i-net cafe im Urlaub mal die Möglichlkeit dazu hab...)
Also es gibt versch. Vor- und Nachteile: Für ganz normale Menüs im Windows-Stil reicht die Nachrichtenschleife sicherlich aus. Aber mit DX kann man viiiiieeeele mögl Specs realisieren wie transparenz, schiefe Menüs, Zoom etc. Wenn man dann für DInput ein paar Utils für die Mausabfrage schreibt, lässt sich das alles schön und vor allem enfach umsetzen. Das ist dann halt Zeit- und Geschmackssache
Gruß DXer |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 02.07.2007, 14:26 Titel: |
|
|
Mal ne Frage:
Gibts eigentlich für die Maus auch so ne Funktion wie GetAsyncKeyState() ? |
|
Nach oben |
|
|
fast hawk Senior JLI'ler
Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 04.07.2007, 19:10 Titel: |
|
|
@Otscho kp
was des stocken angeht musst du schon sehr wenig fps haben < 16 in extremfällen auch noch bis 12.
Der Windwoszeiger stockt zwar nicht dafür hinkt das programm dem zeiger immer ein bisschen nach. Für ein simples Menu oder einen Karteneditor würde ich den Windowszeiger nehmen. Im Spiel musst du selber entscheiden was für dich konfortabler ist.
gruß f.h. _________________ Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 04.07.2007, 20:18 Titel: |
|
|
Ok, ich fang jetzt einfach die WM_LBUTTONDOWN und WM_LBUTTONUP Nachrichten ab und speicher die in nem Singleton für Mauseingaben. Den kann ich dann später noch mit DirectInput ausstatten. Aber ich muss sagen : So wie es jetzt funktioniert, kann man echt sehr zufrieden sein. |
|
Nach oben |
|
|
|