답변:
일반적으로 XNA로 작업 할 때는 이벤트 중심 코드 패러다임에서 루프 중심 코드 패러다임으로 이동해야합니다. 업데이트 코드는 초당 60 번 반복됩니다. 따라서 매번 마우스 상태를보고 버튼이 눌려서 포인터가 rect 내에 있으면 일반적으로 OnClick 이벤트에 배치 할 코드로 분기됩니다.
if(MouseLeftPress()){ DoSomething(); }
하면됩니다. 여기서 MouseLeftPress()
현재 및 이전 왼쪽 버튼 마우스 상태를 비교하기 위해 작성하는 방법입니다. 대부분의 경우 이벤트를 구현하는 것보다 훨씬 쉽습니다.
직접 구현해야합니다. http://bluwiki.com/go/XNA_Tutorials/Mouse_Input 에서 자습서를보십시오.
XNA에서 마우스 클릭을 확인하기위한 실제 코드는 다음과 같습니다.
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);
}
게임이 3D 인 경우 다음에 설명 된 피킹을 구현할 수 있습니다. http://create.msdn.com/en-US/education/catalog/sample/picking_triangle . 기본적으로 이것은 카메라에서 마우스가 클릭하는 곳까지의 광선을 생성합니다 (작은 매트릭스가 투영되지 않음). 광선에 의해 교차 된 물체가 있는지 확인합니다.
게임이 2D 인 경우 창 좌표를 게임 좌표로 상당히 쉽게 변환 할 수 있어야합니다. 그런 다음 선택한 좌표가 객체의 경계 내에 있는지 확인하십시오.
마우스 클릭 여부를 확인하는 가장 간단한 방법은 다음과 같습니다.
//Create this variable
MouseState mouseState;
이제 업데이트 방법에서 이것을 추가하십시오.
mouseState = Mouse.GetState();
if (mouse.RightButton == ButtonState.Pressed)
{
//Do Stuff
}
이것이 도움이 되었기를 바랍니다