我让SFML.NET运行得很好,并且编写了我自己的小场景管理器。在场景界面中,我有一个叫做"Update“的方法。我尝试查看用户是否单击了play按钮或quit按钮,但什么也没有得到。
public void Update(RenderWindow window)
{
if (Mouse.IsButtonPressed(Mouse.Button.Left))
{
Program.WriteDebug("Mouse was clicked.");
Vector2i mousePosition = Mouse.GetPosition(window);
if (play.TextureRect.Contains(mousePosition.X, mousePosition.Y))
{
// Not displaying text.
Program.WriteDebug("Play button pressed.");
}
else if (quit.TextureRect.Contains(mousePosition.X, mousePosition.Y))
{
// Not displaying text.
Program.WriteDebug("Quit button pressed");
}
}
}编辑:我将项目设置为Console Application,这样我就可以看到控制台和应用程序。
发布于 2015-08-05 21:56:08
您正在使用纹理竖直作为全局单击区域:
if (play.TextureRect.Contains(mousePosition.X, mousePosition.Y))
{
// Not displaying text, because the texture rect can be something like:
// width: 100 height: 30 top: 0 left: 0
// or you don't use it at all and it's all zero (impossible to click)
Program.WriteDebug("Play button pressed.");
}这是因为纹理直立是纹理的局部坐标,也就是说纹理的哪一部分正在显示。您需要使用按钮的全局边界:
if (play.getGlobalBounds.Contains(mousePosition.X, mousePosition.Y))
{
// should displaying text.
Program.WriteDebug("Play button pressed.");
}全局边界是实体的大小和位置,包括旋转和缩放等所有变换。这对你来说是正确的。
https://stackoverflow.com/questions/23982492
复制相似问题