【问题标题】:How to recognize mouse clicks / movement only when window is not covered in XNA?仅当 XNA 未覆盖窗口时如何识别鼠标点击/移动?
【发布时间】:2016-04-07 20:55:41
【问题描述】:

在 XNA(MonoGame、FNA)中使用鼠标控件时,我使用如下方法:

    public static bool IsMouseClickedLeft()
    {
        // No clicks if game is not the active application
        if (Game.IsActive == false) return false;

        if (mouseState.LeftButton == ButtonState.Pressed) return true;
        return false;
    }

但是,在窗口模式(如果不是全屏)下,即使游戏窗口被其他窗口覆盖或部分覆盖,例如鼠标点击(和鼠标移动)也会被识别和处理。浏览器或 Windows 文件资源管理器。如何确保只识别鼠标点击游戏窗口的可见(未覆盖)部分。

【问题讨论】:

    标签: c# user-controls xna mouse mouseover


    【解决方案1】:
    if (ms.LeftButton == ButtonState.Pressed
    && _previousMouseState.LeftButton == ButtonState.Released
    && this.IsActive
    && ms.X >= 0 && ms.X < graphics.PreferredBackBufferWidth
    && ms.Y >= 0 && ms.Y < graphics.PreferredBackBufferHeight
    && System.Windows.Forms.Form.ActiveForm != null
    && System.Windows.Forms.Form.ActiveForm.Text.Equals(this.Window.Title)) {
    

    //鼠标被点击,窗体处于活动状态 }

    这是在http://www.systemroot.ca/2011/08/xna-check-if-a-click-is-on-the-game-form-window/ 找到的

    本质上,您正在检查鼠标是否在屏幕内。写那篇文章的那位先生也在使用自定义地图编辑器,发现他还需要检查活动表单,这就是最后两行所做的,以确保活动窗口确实是游戏窗口。

    【讨论】:

    • 很遗憾,最近的 .net 版本中似乎没有“System.Windows...”?
    • 右键单击解决方案树中的项目,添加引用,选择 System.Windows.Forms。您有时需要添加对一些非默认程序集的引用。取自这个问题:stackoverflow.com/questions/6639468/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多