В этой теме 17 ответов, 6 участников, последнее обновление Павел Букреев 7 года/лет, 4 мес. назад.
-
АвторСообщения
-
Мне нужно сделать так, чтобы по нажатию кнопки включался источник света(opengl), а когда пользователь нажимает на ту же кнопку ещё раз – свет выключался.
Как сделать так, чтобы по первому нажатию включить, а по повторному выключить итд?примерно в 13 уроке (или где то там) мы выводили свиток с текстом на одну клавишу ТАБ
Спасибо, тот пример натолкнул меня на светлую мысль.
Получилось как то так:
C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960//trun on / turn off red lightif(event.type == Event::KeyPressed)if((event.key.code == Keyboard::Num1)){switch(status){case true:{glEnable(GL_LIGHT0);status = false;break;}case false:{glDisable(GL_LIGHT0);status = true;break;}}}//trun on / turn off green lightif(event.type == Event::KeyPressed)if((event.key.code == Keyboard::Num2)){switch(status){case true:{glEnable(GL_LIGHT1);status = false;break;}case false:{glDisable(GL_LIGHT1);status = true;break;}}}//trun on / turn off normal(white) lightif(event.type == Event::KeyPressed)if((event.key.code == Keyboard::Num3)){switch(status){case true:{glEnable(GL_LIGHT2);status = false;break;}case false:{glDisable(GL_LIGHT2);status = true;break;}}}if (event.type == sf::Event::MouseButtonPressed)
{
std::cout << “выводим чтонибуть\n” //не выскакиевает ни это сообщение
if (event.mouseButton.button == sf::Mouse::Left)
{
std::cout << “выводим чтонибуть\n” //ни это темболие
}
}не срабатывает ивент на нажатие кнопки мыши, с чем может быть связана проблема?
Так попробуй, у меня работает.
if (event.type == sf::Event::MouseButtonPressed) // Используем мышь
if (event.key.code == sf::Mouse::Button::Right) // Сразу же уточняем какую клавишу, в данном случае правую
{
std::cout << “Что-то там выводится” << std::endl;
}Эти условия должны находится в теле цикла обработчика событий.
C++1234while(window->pollEvent(evt)){//Ваши действия}у меня не воспринимает именно команду sf::Event::MouseButtonPressed, при этом реагирует на sf::Event::MouseButtonReleased
if (event.type == sf::Event::MouseButtonPressed)//так не работает
{
….
}а так работает:
if (event.type == sf::Event::MouseButtonReleased)
{
….
}такое поведение лишено всякой логики, может быть проблемма в самом SFML?
Скинь код целиком, посмотрим и скажем
Ага, или проект + ехе, у себя запустим
С сфмл все так, поскольку была бы не только у тебя такая проблема. Паша, стёб не засчитан.
Да и тем более ответ уже был дан, просто Yurec , не использовал условие на конкретную клавишу
ваще то это был не стёб и я реально планировал попробовать у себя запустить и если че – подредактировать.
В общем не решив проблемы своими силами, решил закинуть вам проект.
Это полигон для экспериментов с SFML для меня, делаю стратегию. причина почему не работает MouseButtonPressed мистически не понятна.
https://www.hightail.com/download/bXBZeUNETStsUi9IRHNUQwкрасивенько выглядит))
что именно не работает? я смог двигать передвигать танк кликом мыши по нему, а затем и по месту куда ему надо ехать – у меня это работает. в коде ничего не менял
потому что движение я поставил на
if (event.type == sf::Event::MouseButtonReleased)
{
….
}там есть закомменченные строки
////не работает по непонятным причинам
//if (event.type == Event::MouseButtonPressed)//если нажата клавиша мыши
//{
// if (event.key.code == Mouse::Left)//а именно левая
// {
// std::cout << “pressed\n”;
// }
//}
даже если снять комментирование с них, сигнал не проходит, и в консоль ничего не пишет.
Мне важна эта функция потому что без неё сложно придумать массовое выделение юнитов в области когда зажав кнопку ты выбираешь всех кто попал в выделенную область, как это происходит в стратегиях. -
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.