При нажатии на Sprite не регистрируется
У меня 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");
}
}
}
РЕДАКТИРОВАТЬ: у меня есть проект для консольного приложения, поэтому я могу видеть консоль и приложение.
1 ответ
Вы используете texturerect в качестве глобальной области щелчка:
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.");
}
Глобальные границы - это размер и положение объекта, включая все преобразования, такие как вращение и масштабирование. Это правильный выбор для вас.