Xna 确定鼠标在哪个精灵上

Xna 确定鼠标在哪个精灵上,xna,mouseover,isometric,Xna,Mouseover,Isometric,我试图确定在一个等轴测的2D游戏中鼠标在哪个精灵的上方。我认为我的最佳选择是将每个精灵绘制成不同的颜色,并将其转换为纹理2D,此时我可以从鼠标点获取颜色数据,并对照绘制的精灵进行检查 但是,这种方法的问题是,我无法将单个精灵的颜色更改为纯色。如果我在spriteBatch.Draw调用中更改颜色,它只会着色精灵的颜色,而不是以纯色绘制,因此我从纹理检索的数据没有帮助 用纯色绘制这些精灵有什么建议或帮助吗?不要这样做。创建一个新的渲染目标并将数据复制到内存中,即使是每秒60次,也远远超出了当前系统

我试图确定在一个等轴测的2D游戏中鼠标在哪个精灵的上方。我认为我的最佳选择是将每个精灵绘制成不同的颜色,并将其转换为
纹理2D
,此时我可以从鼠标点获取颜色数据,并对照绘制的精灵进行检查

但是,这种方法的问题是,我无法将单个精灵的颜色更改为纯色。如果我在
spriteBatch.Draw
调用中更改颜色,它只会着色精灵的颜色,而不是以纯色绘制,因此我从纹理检索的数据没有帮助


用纯色绘制这些精灵有什么建议或帮助吗?

不要这样做。创建一个新的渲染目标并将数据复制到内存中,即使是每秒60次,也远远超出了当前系统的处理能力

只需使用矩形结构的方法:

var destination = new Rectangle(100, 100, 50, 50);
bool mouseOver = destination.Contains(mouseX, mouseY);

不要那样做。创建一个新的渲染目标并将数据复制到内存中,即使是每秒60次,也远远超出了当前系统的处理能力

只需使用矩形结构的方法:

var destination = new Rectangle(100, 100, 50, 50);
bool mouseOver = destination.Contains(mouseX, mouseY);

我最初考虑使用矩形。包含,但有太多的情况下,我的精灵重叠。此外,由于我的精灵是等距的和不规则的形状,分层精灵和它们之间的随机空白的组合会导致包含返回误报的检查/n我有一套系统,将支票中的精灵限制在每次支票10~20个范围内。也许我会再次尝试使用某种形式的矩形,然后强制玩家在他们想要选择的精灵中心附近进行选择。你仍然可以使用a来近似精灵的形状。它肯定比使用基于像素的方法更有效。如果一些精灵重叠,并且鼠标在所有精灵上,只需按z值(深度)对它们进行排序并取最前面的。我继续,决定使用矩形。包含。我以后可能会遇到一些问题,但现在它正在完成工作。感谢帮助=)虽然我大体上同意使用边界多边形是一种方法,但如果需要像素完美碰撞,理论上可以在GPU上使用遮挡查询(如果支持的话)。Shawn Hargreaves在这里描述了这种技术:我最初考虑使用矩形。包含,但我的精灵重叠的情况太多了。此外,由于我的精灵是等距的和不规则的形状,分层精灵和它们之间的随机空白的组合会导致包含返回误报的检查/n我有一套系统,将支票中的精灵限制在每次支票10~20个范围内。也许我会再次尝试使用某种形式的矩形,然后强制玩家在他们想要选择的精灵中心附近进行选择。你仍然可以使用a来近似精灵的形状。它肯定比使用基于像素的方法更有效。如果一些精灵重叠,并且鼠标在所有精灵上,只需按z值(深度)对它们进行排序并取最前面的。我继续,决定使用矩形。包含。我以后可能会遇到一些问题,但现在它正在完成工作。感谢帮助=)虽然我大体上同意使用边界多边形是一种方法,但如果需要像素完美碰撞,理论上可以在GPU上使用遮挡查询(如果支持的话)。Shawn Hargreaves在这里介绍了这项技术: