JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

MousePosition
Gehe zu Seite 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
Gast
Gast








BeitragVerfasst am: 23.08.2002, 10:53    Titel: MousePosition Antworten mit Zitat

Hi,

ich bin gerade bei Kapitel 20.4.1 (also DirectInput) und möchte dieses Mouse-Polling benutzen...es funzt ja auch alles nur steht da nicht wie ich die MouseKoordinaten rausbekomme...man kriegt immer nur den unterschied zur vorherigen position. Wenn ich aber jetzt ein Bild über den Mousezeiger malen will und die Startposition nicht gleich ist, dann ist der Mauszeiger und das Bild immer verschoben.

Gibt es also eine Möglichkeit die Koordinaten der Maus zu bekommen?
Nach oben
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

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

Versuchs mal mit Kapitel 12.3 <
Maus Nachrichten, da kannse mit GDI die Aktuelle Mausposition entnehmen <
_________________
"Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."

"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."

"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 23.08.2002, 11:20    Titel: Antworten mit Zitat

Wenn du bei DirectInput bleiben willst, folgender Vorschlag:
Verstecke den Orginal-Mauszeiger am Programmbeginn und hole ihn erst zum Beenden wieder vor. Zeichne desweiteren ein Sprite, das du an die Maus-Input-Routine anschließt...

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}


Zuletzt bearbeitet von AFE-GmdG am 27.11.2002, 22:32, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Gast
Gast








BeitragVerfasst am: 23.08.2002, 13:42    Titel: MousePosition Antworten mit Zitat

Danke für die Antworten... Very Happy

Ich habs jetzt erstmal mit GDI gemacht, weil ich hoffe, dass die Geschwindigkeit reicht.

Noch ne Frage zu Cursors:
Kennt jemand von euch ein Programm mit dem mann stink normale aber farbige Cursors macht? (Ich möchte kein Bild haben Exclamation )
Nach oben
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 23.08.2002, 14:17    Titel: Antworten mit Zitat

Paintbrush Smile
Datei 32x32 Pixel groß machen, und als *.cur speichern...
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 23.08.2002, 15:17    Titel: Antworten mit Zitat

wieso paintbrush , mit Visual C++ geht das doch auch unter Ressourcen ...
hab mir sogar ein schwarzen Cursoar eingefügt Very Happy
_________________
"Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."

"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."

"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 23.08.2002, 16:56    Titel: Antworten mit Zitat

Aber ich glaube nicht wirklich Farbig, oder?
Mit Paintbrush kann er auf 16,7 Millionen Farben zugreifen...

Dafür haperts an der Transparenz und der Punktpositionierung Sad

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hasenfuß
Senior JLI'ler


Alter: 37
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 24.08.2002, 08:46    Titel: Antworten mit Zitat

AFE-GmdG hat Folgendes geschrieben:

Verstecke den Orginal-Mauszeiger am Programmbeginn und hole ihn erst zum Beenden wieder vor.
AFE-GmdG

Wie macht man des? Und ausserdem kann mann doch in den Einstellungen von der Funktion CreateWindow(oder so) schon nen anderen Cursor angeben oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 24.08.2002, 09:01    Titel: Antworten mit Zitat

MSDN => ShowCursor(BOOL Visible);
Man kann bei CreateWindow einen Cursor angeben, der für das aktuelle Fenster verwendet wird.
Aber ich meinte so einn Mousecursor wie er z.B. in Dungeon Keeper (1 oder 2), in Black&White oder so verwendet wird, also ein voll animiertes Sprite, das statt dem simplen Zeiger verwendet wird. Außerdem ist man dann nicht auf 32x32 Pixel beschränkt...

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hasenfuß
Senior JLI'ler


Alter: 37
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 24.08.2002, 09:15    Titel: Antworten mit Zitat

Aso. An sowas hab ich in meiner Bescheidenheit gar nich gedacht!! Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 26.11.2002, 18:23    Titel: Antworten mit Zitat

AFE: ich würde nicht sagen, dass die Cursors von Dungeon Keeper und Black&White Sprites sind, sondern viel mehr 3D-Models.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 27.11.2002, 06:51    Titel: Antworten mit Zitat

Es ist doch egal, ob der Mauszeiger, der angezeigt wird ein 3D-Modell ist, oder "nur" ein flaches, animiertes Sprite.

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Revil
Senior JLI'ler



Anmeldedatum: 28.07.2002
Beiträge: 242

Medaillen: Keine

BeitragVerfasst am: 28.11.2002, 18:22    Titel: Antworten mit Zitat

hmm ich hab mir für mein spiel einen ingame editor gebastelt... funktioniert auch alles ganz gut soweit, nur leider "schwimmt" die maus ziemlich, also sie reagiert total träge... das nervt wenn man größere level bauen will... hat jemand ne ahnung woran das liegen kann?

Ich benutze in etwa diesen code (etwas vereinfacht):

Init:
Code:


//Maus
lpDI->CreateDevice(GUID_SysMouse,&lpDIMouse, NULL);

lpDIMouse->SetDataFormat(&c_dfDIMouse);

lpDIMouse->SetCooperativeLevel(hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);

// c_dfDIKeyboard ist eine vordefinierte Variable
    if(FAILED(lpDIMouse->SetDataFormat(&c_dfDIMouse)))
    {
        Error("Fehler bei der Initalisierung von DirectInput! Maus Init fehlgeschlagen!");
    }

DIPROPDWORD DIProperties;

//Puffer intialisieren
ZeroMemory(&DIProperties,sizeof(DIProperties));
DIProperties.diph.dwSize = sizeof(DIPROPDWORD);
DIProperties.diph.dwHeaderSize = sizeof(DIPROPHEADER);

DIProperties.diph.dwObj = 0;
DIProperties.diph.dwHow = DIPH_DEVICE;

//Puffergröße setzen
DIProperties.dwData = 16;

lpDIMouse->SetProperty(DIPROP_BUFFERSIZE,&DIProperties.diph);


Mausabfrage
Code:

///MAUS
DWORD NumElements = 1;
DIDEVICEOBJECTDATA data;
ZeroMemory(&data,sizeof(data));

if(FAILED(lpDIMouse->GetDeviceData(sizeof(data),&data,&NumElements,0)))
{
lpDIMouse->Acquire();
return;
}




///MAUS!!!
if(data.dwOfs == DIMOFS_X)
{
MouseX+=data.dwData;
}

if(data.dwOfs == DIMOFS_Y)
{
MouseY+=data.dwData;
}

if(data.dwOfs == DIMOFS_BUTTON0)
{
if(data.dwData)
{
int tilexpos = (MouseX - Scroller1.ScrollerX())/32;
int tileypos = (MouseY - Scroller1.ScrollerY())/32;
SpielFeld[tilexpos][tileypos].CreateTile(tilexpos,tileypos,TileStyle); //MouseClick!
}
}


am anfang hab ich MouseX und MouseY global als int's initialisiert und auf je 200 gesetzt so das die maus am anfang so ziemlich rechts oben ist...

In meiner Renderfunktion, blitte ich dann ein Sprite an der Position...


edit: hm ich zähl jetzt das doppelte von data.dwData zur aktuellen mausposition, dadurch wird die maus etwas agiler, allerdings ist es immer noch nicht perfekt..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 28.11.2002, 19:31    Titel: Antworten mit Zitat

Das Problem ist allgemein geschildert ein DirectX-Puffer-Problem.
Als ich für meine Gestenabfrage mit der Maus rumgespielt habe ist mir folgendes aufgefallen:
Bewegt man die Maus GENAU nach oben oder nach unten wird nur 1 Y-Ereignis erstellt - alles klar also. Wird nur GENAU nach rechts oder links bewegt wird nur ein X-Ereignis erstellt - ebenfalls alles in Ordnung. Wenn die Maus nun aber schräg bewegt wird, werden 2 Ereignisse erstellt, eines wo nur ein X-Wert verändert wird und eines nur für den Y-Wert. Mit einem Normalem Puffer von 1, wird der 2. Wert verschluckt - die Maus kann im Extremfall nur Horizontal bewegt werden. Wird der Puffer größer vergisst er zwar nichts, aber du fragst nicht alle gepufferten Zustände ab, sondern nur einen. Erst wenn die Maus erneut bewegt wird, wird ein neues Ereignis ausgelöst - aber du erhältst noch die alten Ereignisse aus dem Puffer.
Lösung: Bei jedem Mausereignis überprüfen, wie viele Ereignisse im Puffer vorliegen und ALLE auslesen. Erst danach lohnt sich ein neuzeichnen des Cursors an der passenden Stelle.

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Revil
Senior JLI'ler



Anmeldedatum: 28.07.2002
Beiträge: 242

Medaillen: Keine

BeitragVerfasst am: 28.11.2002, 20:32    Titel: Antworten mit Zitat

sehr gut, das sollte mein Problem lösen! Ich hab nicht drangedacht das der Puffer ja dann überschrieben wird...


Danke vielmals!!!
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, 3  Weiter
Seite 1 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