Odpowiedzi:
Podczas pracy z XNA ogólnie musisz przejść od paradygmatu opartego na zdarzeniu do paradygmatu opartego na pętli. Twój kod aktualizacji zapętla się 60 razy / sek. Więc za każdym razem spójrz na stan myszy, a jeśli przycisk jest wciśnięty, a wskaźnik znajduje się w odbytnicy, następnie przejdź do kodu, który zwykle umieszczasz w zdarzeniu OnClick.
if(MouseLeftPress()){ DoSomething(); }
, gdzie MouseLeftPress()
jest metoda, którą piszesz, aby porównać obecny i poprzedni lewy przycisk myszy. Uważam to za łatwiejsze niż wdrażanie wydarzeń przez większość czasu.
Musisz go wdrożyć samodzielnie. Spróbuj obejrzeć samouczek pod adresem : http://bluwiki.com/go/XNA_Tutorials/Mouse_Input
XNA daje tylko tyle, ile potrzeba do zbudowania własnych klas wejściowych - i powinieneś to zrobić, biorąc pod uwagę oferowane przez nich narzędzie.
Poleciłbym klasę wprowadzania myszy opisaną w tym poście na blogu ( kod źródłowy ). Wykrywa naciśnięcie, przytrzymanie lub zwolnienie przycisku i pozwala uzyskać te informacje za pośrednictwem ankiety lub zdarzeń.
W powiązanej notatce ten sam post na blogu zawiera również klasy urządzeń wejściowych klawiatury i gamepada.
Rzeczywisty kod sprawdzania kliknięcia myszą w XNA jest mniej więcej taki;
MouseState previousMouseState;
protected override void Initialize()
{
// TODO: Add your initialization logic here
//store the current state of the mouse
previousMouseState = Mouse.GetState();
}
protected override void Update(GameTime gameTime)
{
// .. other update code
//is there a mouse click?
//A mouse click occurs if the goes from a released state
//in the previous frame to a pressed state
//in the current frame
if (previousMouseState.LeftButton == ButtonState.Released
&& Mouse.GetState().LeftButton == ButtonState.Pressed)
{
//do your mouse click response...
}
//save the current mouse state for the next frame
// the current
previousMouseState = Mouse.GetState();
base.Update(gameTime);
}
Jeśli twoja gra jest w 3D, możesz zaimplementować komisjonowanie, które opisano tutaj: http://create.msdn.com/en-US/education/catalog/sample/picking_triangle . Zasadniczo tworzy to promień z kamery do miejsca kliknięcia myszką (z niewielką matrycą, która nie powoduje projekcji), a następnie sprawdzasz, czy któryś z twoich obiektów nie został przecięty przez promień.
Jeśli gra jest 2D, powinieneś być w stanie dość łatwo przetłumaczyć współrzędne okna na współrzędne gry. Następnie sprawdź, czy wybrane współrzędne mieszczą się w granicach dowolnego z twoich obiektów.
Najprostszym sposobem sprawdzenia, czy kliknięto myszą, jest to
//Create this variable
MouseState mouseState;
teraz w metodzie aktualizacji dodaj to
mouseState = Mouse.GetState();
if (mouse.RightButton == ButtonState.Pressed)
{
//Do Stuff
}
mam nadzieję, że to pomogło