При нажатии на 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.");
}

Глобальные границы - это размер и положение объекта, включая все преобразования, такие как вращение и масштабирование. Это правильный выбор для вас.

Другие вопросы по тегам