SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Таймер
В этой теме 6 ответов, 5 участников, последнее обновление MicroSDA 7 года/лет, 8 мес. назад.
-
АвторСообщения
-
Напишите код простенького таймера задержки в sfml. НЕ SLEEP. Например мне нужна задержка в цикле.
C++12345for(int i = 0; i < 5; i++){//что-то происходит, например взрыв//здесь задержка перед следующим взрывом}C++123456789101112//......static float sleep = 0;while(window.IsOpen()){sleep+=time;if(time >= 100){sleep = 0;//Твои действия...}}Я хочу сделать универсальную функцию таймер. Допустим у меня много действий в игре по таймеру, и если к каждому писать такой код…
Вот попробовал. Создал отдельную функцию и пытался сделать задержку отрисовки, но на деле окно просто зависало.
C++12345678910111213141516171819static float ftime = 0;void timer(int x){sf::Clock clock;while (ftime < x)ftime = clock.getElapsedTime().asSeconds();ftime = 0;}//......while(window.IsOpen()){//....for (it = listEnemy.begin(); it != listEnemy.end(); it++){window.draw((*it)->getSprite());timer(10); //задержка на 10 сек перед след итерацией//то есть отрисовкой}}Да и использовать глобальную переменную не камильфо… Какие будут идеи?
Что мешает тебе засунуть эти функции в таймер, а не наоборот?
А что ты хотел увидеть, кроме ” зависания ” если ты останавливаешь всю программу? Если хочешь что что либо при таком раскладе происходило, делай потоки.
ну или как о так if( timer.get() ){…} и где нибудь выше его активация, с условием что повторная возможна ток по окончанию работы.
А чем плох Sleep()? все также, ток делается счетчик циклов и устанавливается значение на нужное количество( может чутка сложнее получить наиболее точное значение, но никто же не мешает синхронизироваться с внешним временем)C++1234567int timer=0;if(timer>3000){while(){//Прога не зависнет, а этот цикл будет запускаться примерно раз в секунду.}timer=0;}else timer++;Делай класс. В него пили поток, поток и будет твоим таймером, в потоке сделай цикл пока время меньше или равно времени которое ты туда передаешь. Когда цикл обрывается то поток должен закрыться. Вот по этому и определяй закончился ли таймер или нет. Внутри цикла потока считай прошедшие время этого потока и плюсуй его в переменную индикатор. Ка-то так.
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.