我有SFML。NET工作很好,并且自己写了一个小场景管理器。在场景界面中,我有一个名为"更新"的方法。我试图查看用户是否点击了播放按钮或退出按钮,但我什么也没得到。
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");
}
}
}
编辑:我将项目设置为控制台应用程序,因此我可以看到控制台和应用程序。
您正在使用 textur竖立作为全局点击区域:
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.");
}
这是因为textur竖立是来自纹理的局部坐标,表示纹理的哪个部分正在显示。您需要使用按钮的全局边界:
if (play.getGlobalBounds.Contains(mousePosition.X, mousePosition.Y))
{
// should displaying text.
Program.WriteDebug("Play button pressed.");
}
全局边界是实体的大小和位置,包括旋转和缩放等所有转换。