Monogame 3.5:未检测到鼠标点击
Monogame 3.5: Mouse Click Not Detected
我的单人游戏已停止响应鼠标点击。在 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。
我试过有线鼠标和触控板。键盘输入工作正常。还有其他人 运行 参与其中吗?
我一直用这种方式。
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;
}
}
}
这实际上不是 Monogame 的问题,而是我的游戏逻辑中的一个问题,很难追踪。
升级到 3.5 后,我不得不重新配置 Texture2D 的加载方式,这也意味着重构一些 classes。我最终在 class 中得到了 class,它们都继承自 Game.
public class Brush_Control : Game
{
public class Tile : Game
{
排除过程将搜索范围缩小到 class。我相信这会导致无限循环以某种方式干扰输入,但不会引发错误或导致明显的冻结。
删除作为父项的内部 Game 引用解决了这个问题,事实证明我不再需要它了。
我的单人游戏已停止响应鼠标点击。在 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。
我试过有线鼠标和触控板。键盘输入工作正常。还有其他人 运行 参与其中吗?
我一直用这种方式。
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;
}
}
}
这实际上不是 Monogame 的问题,而是我的游戏逻辑中的一个问题,很难追踪。
升级到 3.5 后,我不得不重新配置 Texture2D 的加载方式,这也意味着重构一些 classes。我最终在 class 中得到了 class,它们都继承自 Game.
public class Brush_Control : Game
{
public class Tile : Game
{
排除过程将搜索范围缩小到 class。我相信这会导致无限循环以某种方式干扰输入,但不会引发错误或导致明显的冻结。
删除作为父项的内部 Game 引用解决了这个问题,事实证明我不再需要它了。