2D XNA 游戏鼠标点击

2024-03-18

我有一个 2D 游戏,其中仅使用鼠标作为输入。 我怎样才能做到这一点,以便当鼠标悬停在 Texture2D 对象上时,Texture2D 和鼠标光标会发生变化,并且当单击纹理时,它会移动到另一个位置。

简而言之,我想知道当我将鼠标悬停在或单击 Texture2D 上时如何执行某些操作。


在 XNA 中您可以使用鼠标类 http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.mouse_members.aspx查询用户输入。

最简单的方法是检查每一帧的鼠标状态并做出相应的反应。鼠标位置是否在某个区域内?显示不同的光标。在此帧期间是否按下了右侧按钮?显示菜单。 ETC。

var mouseState = Mouse.GetState();

获取屏幕坐标中的鼠标位置(相对于左上角):

var mousePosition = new Point(mouseState.X, mouseState.Y);

当鼠标位于特定区域内时更改纹理:

Rectangle area = someRectangle;

// Check if the mouse position is inside the rectangle
if (area.Contains(mousePosition))
{
    backgroundTexture = hoverTexture;
}
else
{
    backgroundTexture = defaultTexture;
}

单击鼠标左键时执行某些操作:

if (mouseState.LeftButton == ButtonState.Pressed)
{
    // Do cool stuff here
}

但请记住,您将始终获得以下信息current框架。因此,虽然在单击按钮期间可能会发生一些很酷的事情,但一旦释放按钮就会停止。

要检查单击,您必须存储最后一帧的鼠标状态并比较已更改的内容:

// The active state from the last frame is now old
lastMouseState = currentMouseState;

// Get the mouse state relevant for this frame
currentMouseState = Mouse.GetState();

// Recognize a single click of the left mouse button
if (lastMouseState.LeftButton == ButtonState.Released && currentMouseState.LeftButton == ButtonState.Pressed)
{
    // React to the click
    // ...
    clickOccurred = true;
}

您可以使其更加高级并处理事件。因此,您仍然可以使用上面的代码片段,但不直接包含您将触发事件的操作代码:MouseIn、MouseOver、MouseOut。 ButtonPush、ButtonPressed、ButtonRelease 等

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2D XNA 游戏鼠标点击 的相关文章

  • 无法使用 strptime() 获取秒数

    我收到 YYYY MM DDThh mm ss S Z hh mm 这种格式的日期时间 我正在尝试使用复制该值strptime如下所示 struct tm time 0 char pEnd strptime datetime Y m dT
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器

随机推荐

  • 你的 Nvarchar() 有多大

    设计数据库时 在决定 nvarchar 应该有多大时 您会考虑哪些决定 如果我要制作一个地址表 我的直觉反应是地址行 1 为 nvarchar 255 就像旧的访问数据库一样 我发现使用这个让我对旧的 字符串将被截断 感到烦恼 我知道可以通
  • 在 C# 中返回 SortedList 中的第一个元素

    我有一个SortedList在 C 中 我想返回列表的第一个元素 我尝试使用 First 功能 但它并没有真正起作用 有人可以告诉我该怎么做吗 对彼此而言SortedList https learn microsoft com en us
  • angularjs 禁用 $http/$q 调用上的按钮

    遵循 DRY 原则 我想编写一个按钮指令 在 http 类的持续时间内保持按钮禁用 我想这样做是为了禁止用户多次单击按钮 但我无法考虑如何在指令内获取函数承诺状态 因为该函数驻留在 scope 上 这个场景非常通用 按钮 ng click
  • WebDriverWait + 搜索项目

    创建激活码后 需要 1 60 秒的时间将代码上传到系统中 因此 在创建新代码后 我想使用 WebDriverWait 60 秒来确保在这段时间内每 3 秒我想单击 搜索 按钮 有什么办法可以做到这一点吗 new WebDriverWait
  • 安全、密码学:愚蠢的挑战 - 响应协议?

    好吧 大家只是一个小游戏 我有一个项目的一些规格 在某些时候 他们要求以下内容通过网络加密密码 并称这是一个质询响应协议 CLIENT SERVER 1 ask for challenge gt 2 lt send SHA1 taken f
  • Safari 错误未定义不是对象

    我在这里阅读了一些关于我的问题的帖子 但我不知道如何将其应用到我的代码中 因为我不使用数组或其他对象 在 Safari 中我收到此错误 TypeError undefined is not an object evaluating rela
  • 是否可以使用 WIX 创建多语言安装程序?

    是否可以使用 WIX 创建多语言安装程序 如果您创建嵌入式转换 则无需引导程序即可执行此操作 并且 MSI 安装程序将根据您的系统区域设置自动应用其中之一 有关完整的详细信息和脚本 请点击以下链接 http www geektieguy c
  • 无法将“%26”传递到 WCF 服务中的 WebGet UriTemplate 变量?

    我有一个带有此声明操作的 WCF 服务 WebGet UriTemplate Test testString public String Test String testString return testString 但是当尝试调用 UR
  • 了解filterM

    Consider filterM x gt True False 1 2 3 我只是无法理解 Haskell 对此的魔力filterM用例 该函数的源码如下 filterM Monad m gt a gt m Bool gt a gt m
  • 从 Java 中的组合框中删除所有项目

    我需要从组合框中删除所有项目 int itemCount combo getItemCount for int i 0 i lt itemCount i combo removeItemAt 0 此代码将删除除最后一项之外的所有项目 它给出
  • 枚举还是表格?

    我正在将其设为社区维基 因为我会欣赏人们的方法 而不一定是答案 我所处的情况是 我有很多查找类型数据字段 这些字段不会改变 一个例子是 年薪选项 0 25K选项 25K 100K选项 100K 我希望通过枚举轻松获得这些选项 但也希望数据库
  • Django-Postgres 完整性错误:重复密钥 --- 如何修复?

    添加模型的新实例时出现完整性错误 这是回溯 Traceback File home robain webapps django lib python2 6 django core handlers base py in get respon
  • 如何迭代 SortedSet 以修改其中的项目

    假设我有一个列表 在for循环中修改列表的项目没有问题 for int i 0 i lt list size i list get i setId i 但我有一个 SortedSet 而不是列表 我怎样才能用它做同样的事情 谢谢 首先 Se
  • 无需插值即可缩小/调整图像大小

    我有一个图像F大小为 1044 1408 只有 3 个整数值 0 2 3 我想把它缩小到360 480 现在我正在使用Z cv2 resize F 480 380 But Z是插值的 它有许多唯一值 不仅仅是 0 2 和 3 我不能将插值值
  • 如何使用 boost 文件系统确定文件或目录的所有者? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 boost 获取文件的所有者和组 https stackoverflow com questions 10289491 get files owner and group using boost
  • Spring AOP 捕获方法内的日志

    我是 Spring AOP 的新手 我确实理解它背后的概念 我也确实理解 Before 或 After 等用法的概念 我很困惑的仍然是Spring AOP的用法 想想下面的类方法 public void test int x x logge
  • CoordinatorLayout + AppbarLayout + Viewpager 不调整子布局大小

    I have a problem using CoordinatorLayout in conjunction with ViewPager and the ViewPager 布局无法正确调整大小 假设求解的高度包括选项卡高度 所以当我滚
  • 使用Application.Quit时手机游戏重新启动

    好的 所以我将旧的 4 6 Unity 项目升级到 Unity 5 0 总的来说 这个过程相对轻松 但现在当我为 Android 构建时 我的 退出 按钮不起作用 我通过 logcat 收到一条非常奇怪的消息 E Unity 23691 R
  • tslint 指出的“as 语法”是什么?

    我升级了 tslint 现在它抱怨 ERROR src Metronome JobFetcher ts 13 32 Type assertion using the lt gt syntax is forbidden Use the as
  • 2D XNA 游戏鼠标点击

    我有一个 2D 游戏 其中仅使用鼠标作为输入 我怎样才能做到这一点 以便当鼠标悬停在 Texture2D 对象上时 Texture2D 和鼠标光标会发生变化 并且当单击纹理时 它会移动到另一个位置 简而言之 我想知道当我将鼠标悬停在或单击