我的monogame游戏已停止响应鼠标点击。在3.5版之前,这个工作正常。以下是我目前获得输入的方式:
protected override void Update (GameTime game_time)
{
Mouse_Input (game_time);
}
void Mouse_Input(GameTime game_time)
{
mouse_current = Mouse.GetState();
if (mouse_current.LeftButton == ButtonState.Pressed)
{
// click
}
}
在函数中设置断点会显示所有代码都被命中,但LeftButton始终是ButtonState.Released。
我尝试使用有线鼠标和触控板。键盘输入工作正常。还有其他人遇到过这个吗?
答案 0 :(得分:0)
我总是这样使用。
MouseState currentMouseState;
MouseState oldMouseState;
public bool checkClick()
{
oldMouseState = currentMouseState;
currentMouseState = Mouse.GetState();
if (Visible)
{
if (currentMouseState.LeftButton == ButtonState.Pressed && oldMouseState.LeftButton == ButtonState.Released)
{
return true;
}
}
}
如果要检查鼠标是否单击了一个矩形(例如Hud元素)
public bool checkClickRectangle(Rectangle rec)
{
oldMouseState = currentMouseState;
currentMouseState = Mouse.GetState();
if (Visible)
{
if (rec.Contains(new Vector2(Mouse.GetState().X, Mouse.GetState().Y)) && currentMouseState.LeftButton == ButtonState.Pressed && oldMouseState.LeftButton == ButtonState.Released)
{
return true;
}
}
}
答案 1 :(得分:0)
这对Monogame来说实际上不是问题,但我的游戏逻辑中存在一个很难追查的问题。
升级到3.5之后,我不得不重新配置我的Texture2D的加载方式,这也意味着重构一些类。我最终得到了一个类中的一个类,它们都继承自Game。
public class Brush_Control : Game
{
public class Tile : Game
{
消除过程缩小了对这个类的搜索范围。我相信这会导致无限循环以某种方式干扰输入,但不会抛出错误或导致明显的冻结。
删除内部游戏参考作为父母修复了问题,结果发现我不再需要在那里拥有它。