Skocz do zawartości

[C++][OpenGL][winapi] ustalanie pozycji myszki


Force

Polecane posty

Problem w sumie nie jest taki, że tylko w c++ i opengl-u, ale ja te rzeczy teraz używam więc w tym dziale jest. Mam sobie silnik, który umożliwia tworzenie grafiki w trybie pełnoekranowym lub okienkowym, używając różnych wymiarów/rozdzielczości (można przełączać się bez wyłączania programu). Informacje na temat położenia myszki pobieram z komunikatów, ale są to współrzędne w ramach okna. Ale potrzebuje mieć dwie dane, tak jak w dx-ie jest chce co klatkę znać położenie myszki na oknie, ale także jej przesunięcie względem poprzedniej klatki. Sprawa na pierwszy rzut oka wydaje się prosta, że tylko odjąć od współrzędnych stare współrzędne, ale to nie jest tak jak być powinno, gdy kursor dojdzie do krawędzi okna/ekranu to już nie zwiększy/zmniejszy współrzędnej gdy chcemy go przesunąć dalej co wszystko psuje, kto to widziała taką strzelankę, że więcej niż 180 stopni bohater się nie odwróci. Stąd pytanie jak zrobić to (dx to jakoś ma), należy pamiętać, że program może także w oknie działać.

Myślałem, aby mieć zmienną, że jak jest true to co klatkę zawsze ma ustawiać położenie myszki na środek okna/ekranu, jednak tu jest kolejny problem - jak ustawić na środek okna, skoro nie zajmuje ono całego ekranu. SetCursorPos ustawia kursor względem ekranu. Dodatkowo gdybym non stop ustawił kursor na środek okna to by user nigdy nie mógł go opuścić, no i nie chce bawić się w ClipRecty. Najlepszym rozwiązaniem by było gdyby był jakiś komunikat, który zwraca przesunięcie hipotetyczne myszki gdy jest ona przy krawędzi.

Nie używam gluta i glauxa.

 

Wie ktoś jak to zrobić? :)

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

ja bym na początek (czyli dla testów) zrobił tak, aby program pobierał położenie kursora względem okna i ekranu. Następnie całe to obliczanie przesunięcia... :) to obliczył :P z wyników (pomiarów myszki z) ekranu... ;]

Prawdziwy programista wiesza sie wraz ze swoim programem.

Link do komentarza
Udostępnij na innych stronach

a ) Napisałem na początku, że mówię w kontekście ogla bo go używam, a nie bo ma cos wspólnego.

b ) ale się uparłeś na tego dx-a. Jak bym miał używać jakikolwiek kawałek kodu z dx-a to bym stracił podstawową zaletę pisania w ogl-u: przenoszalność na linuksa, więc interesują mnie tylko rozwiązania, ktore co najwyżej używają winapi bo potem będzie się dało znaleźć jakiś kod robiący to samo na linuksa. I nie rób mi dywagacji o dx-ie, zero dx-a :P

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

CYTAT(Force @ pią, 03 kwi 2009 - 20:04)

Myślałem, aby mieć zmienną, że jak jest true to co klatkę zawsze ma ustawiać położenie myszki na środek okna/ekranu, jednak tu jest kolejny problem - jak ustawić na środek okna, skoro nie zajmuje ono całego ekranu. SetCursorPos ustawia kursor względem ekranu. Dodatkowo gdybym non stop ustawił kursor na środek okna to by user nigdy nie mógł go opuścić, no i nie chce bawić się w ClipRecty.

 

 

Dobrze myślisz... Jak ta twoja zmienna jest true to ukrywasz kursor i w każdej klatce ustawiasz go na środek okna... Owszem SetCursorPos ustawia kursor względem ekranu, ale możesz sobie przecież łatwo wydobyć informacje o pozycji, szerokosci i dlugosci twojego okna i odpowiednio ustawić kursor...

Jeśli teraz gracz naciśnie powiedzmy ESC czy coś to zmieniasz zmienną na false i pokazujesz kursor, tylko że już go nie przesuwasz w ogóle więc można wyjechać poza okno... Nie widzę problemu (:

 

CYTAT(Force @ pią, 03 kwi 2009 - 22:42)

bym stracił podstawową zaletę pisania w ogl-u: przenoszalność na linuksa

 

 

To może zamiast zarządzać oknem i tym wszystkim za pomocą WinAPI może lepiej pobaw się z SDL-em (tylko do tworzenia okna i inputów)? Od razu masz przenośny kod i nie musisz potem robić tego samego pod linuxem (;

 

zero dx-a

I tak trzymaj ;)

Piszę proste programy i stronki internetowe na zlecenie, zaliczenie...

Delphi, Pascal, C++, (X)HTML, CSS, trochę PHP, Javascript i MySQL

Kontakt: gg:1477872 e-mail: lewymati@wp.pl

Link do komentarza
Udostępnij na innych stronach

no ale czemu nie możesz przesuwać myszki w oknie?

W WinAPI masz funkcję:

BOOL GetWindowRect(HWND hWnd, LPRECT lpRect);

dzięki której możesz pobrać pozycję okna

 

Wystarczy wtedy jak myszkę w każdej klatce będziesz przesuwał na pozycję o współrzędnych

x: (lpRect.left+lpRect.right)/2

y: (lpRect.top+lpRect.bottom)/2

 

Jakoś nie widzę gdzie tu masz problem...

Piszę proste programy i stronki internetowe na zlecenie, zaliczenie...

Delphi, Pascal, C++, (X)HTML, CSS, trochę PHP, Javascript i MySQL

Kontakt: gg:1477872 e-mail: lewymati@wp.pl

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...