JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Menü in DX9

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
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

BeitragVerfasst am: 31.05.2007, 13:38    Titel: Menü in DX9 Antworten mit Zitat

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)? Smile
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 31.05.2007, 13:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 31.05.2007, 15:44    Titel: Antworten mit Zitat

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


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 31.05.2007, 16:05    Titel: Antworten mit Zitat

hmm vielen Dank Otscho Smile
und danke Dr. Best für die Arbeit, macht die Funktion etwas bequemer Smile

Aber ich korrigiere mal fix n Flüchtigkeitsfehler:
CPP:
    GetClientRect(HWND,&WindowClientArea);

muss
CPP:
    GetClientRect(hWnd,&WindowClientArea);

lauten :X Wink

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


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 27.06.2007, 15:51    Titel: Antworten mit Zitat

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


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 27.06.2007, 16:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 27.06.2007, 16:11    Titel: Antworten mit Zitat

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 Wink

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
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: 27.06.2007, 17:22    Titel: Antworten mit Zitat

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



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 29.06.2007, 13:50    Titel: Antworten mit Zitat

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...) Very Happy

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 02.07.2007, 14:26    Titel: Antworten mit Zitat

Mal ne Frage:
Gibts eigentlich für die Maus auch so ne Funktion wie GetAsyncKeyState() ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 04.07.2007, 19:10    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 04.07.2007, 20:18    Titel: Antworten mit Zitat

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. Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
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