Реакция на нажатие по невидимому спрайту в библиотеке SFML C++
В окне приложения есть несколько спрайтов в разных местах - все они скрыты. При нажатии на эти спрайты, происходит взаимодействие с ними, не смотря на то, что они скрыты. То есть, нажимая на пустое место экрана, они активны. Как от этого избавиться?
Ответы (2 шт):
Автор решения: 0x00004
→ Ссылка
Можно сделать так:
int main()
{
sf::RenderWindow wind(sf::VideoMode(800, 600, 32), "Window", sf::Style::Default);
bool draw = true;
while (wind.isOpen())
{
sf::Vector2f rectSize(100,50);
sf::RectangleShape rect;
rect.setSize(rectSize);
rect.setOrigin(rectSize.x/ 2, rectSize.y/2);
rect.setPosition(wind.getSize().x / 2, wind.getSize().y / 2);
rect.setFillColor(sf::Color::Red);
sf::Event sfEvent;
while (wind.pollEvent(sfEvent))
{
if (sfEvent.type == sf::Event::Closed)
{
wind.close();
}
if (sfEvent.type == sf::Event::KeyPressed)
{
if (sfEvent.key.code == sf::Keyboard::Enter)
{
draw = !draw;
}
}
}
sf::Vector2i pos = sf::Mouse::getPosition(wind);
float halfX = rectSize.x / 2;
float halfY = rectSize.y / 2;
if (draw)
{
if (pos.x >= rect.getPosition().x - halfX && pos.x <= rect.getPosition().x + halfX
|| pos.y >= rect.getPosition().y - halfY && pos.y <= rect.getPosition().y + halfY)
{
std::cout << "Inside" << std::endl;
}
}
wind.clear();
if (draw)
{
wind.draw(rect);
}
wind.display();
}
return 0;
}
Автор решения: Сергей
→ Ссылка
Один из возможных способов это временная блокировка и разблокировка
взаимодействия мыши с невидимым спрайтом, через условия if(true){} и if(false) {} соответственно.