SFML и C++ Уроки \ Разработка игр › Форумы › SFML готовые решения (сниппеты) и советы › простой таймер на SFML
В этой теме 7 ответов, 3 участника, последнее обновление Dikoy 8 года/лет назад.
-
АвторСообщения
-
скачать проект: https://yadi.sk/d/ZrQX6G2ZfeQNc
код почему то отображается не правильно. рекомендую скачать проект
C++1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192#include<SFML\Graphics.hpp>#include<SFML\Audio.hpp>#include<Windows.h>#include <iostream>#include <sstream>#include <string>using namespace sf;using namespace std;string intToString(int a)// переобразовывает число в строку{std::ostringstream ost;ost << a;std::string s_num = ost.str();return s_num;}void timer(int &hour, int &min, int &sec)// отнимает секунды/минуты/часы{if (sec > 0){sec--;}else if (sec == 0 && min>0){sec = 59;min--;}else if (sec == 0 && min == 0 && hour > 0){sec = 59;min = 59;hour--;}else if (sec == 0 && min == 0 && hour == 0){return;}}int main(){RenderWindow window(VideoMode(620, 450), "AKYL");//Font font;// создаю шрифтfont.loadFromFile("fonts/8427182.ttf");// загружаю в него скачанный шрифтMusic a;a.openFromFile("music/muzon.ogg"); a.play();// музыка . просто так . можете убратьconst int size = 40;int hour=0;int min=2;int sec=15;Text hourText("", font, size); Text minText("", font, size); Text secText("", font, size);//тексты дл€ часы/минуты/секундыText text1(":", font, size); text1.setColor(Color::Green);//двоеточие между цифрамиhourText.setColor(Color::Green); minText.setColor(Color::Green); secText.setColor(Color::Green);//цвет цифрhourText.setPosition(100, 200); minText.setPosition(200, 200); secText.setPosition(300, 200);//координаты по€влени€ цифрwhile (window.isOpen()){Event event;while (window.pollEvent(event)){if (event.type == Event::Closed)window.close();}Sleep(990);// торможение программы на 1 секунду//////////////“аймер/////////////timer(hour, min, sec);//отнимает врем€hourText.setString(intToString(hour)); minText.setString(intToString(min)); secText.setString(intToString(sec));// из int в string из string в Text//////////// вывод на экран/////////////////////window.clear();text1.setPosition(150, 200); window.draw(text1);//двоеточиеwindow.draw(hourText); //рисуем часыtext1.setPosition(250, 200); window.draw(text1);//двоеточиеwindow.draw(minText); //рисуем минутыwindow.draw(secText);// и секундыwindow.display();// все вывести на экран}}Akyl, Sleep(990) затормозит всё окно, в котором идет игра. Разве нет? Если да, то можно просто использовать время sfml вместо Sleep
Аа да,но я еще не хорошо изучил время(только начал) . попробую сделать.
Сделал c SFML временем (надеюсь правильно, указывайте на ошибки)
и еще , можно ли реализовать ввод данных через окно?
думаю создать визуальные цифры и при клике на них присваивать переменным данные , и при нажатии старт
начать отсчет. у вас какие идеи?C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293#include<SFML\Audio.hpp>#include <iostream>#include <sstream>#include <string>using namespace sf;using namespace std;string intToString(int a)// преобразовывает число в строку{std::ostringstream ost;ost << a;std::string s_num = ost.str();return s_num;}void timer(int &hour, int &min, int &sec)// отнимает секунды/минуты/часы{if (sec > 0){sec–;}else if (sec == 0 && min>0){sec = 59;min–;}else if (sec == 0 && min == 0 && hour > 0){sec = 59;min = 59;hour–;}else if (sec == 0 && min == 0 && hour == 0){return;}}int main(){RenderWindow window(VideoMode(620, 450), “AKYL”);//Font font;// создаю шрифтfont.loadFromFile(“fonts/8427182.ttf”);// загружаю в него скачанный шрифтMusic a;a.openFromFile(“music/muzon.ogg”); a.play();// музыка . просто такconst int size = 40;//размер шрифтаint hour=0;int min=2;int sec=15;Text hourText(“”, font, size); Text minText(“”, font, size); Text secText(“”, font, size);//тексты для часы/минуты/секундыText text1(“:”, font, size); text1.setColor(Color::Green);//двоеточие между цифрамиhourText.setColor(Color::Green); minText.setColor(Color::Green); secText.setColor(Color::Green);//цвет цифрhourText.setPosition(100, 200); minText.setPosition(200, 200); secText.setPosition(300, 200);//координаты появления цифрClock clock;// запустить измерение времениwhile (window.isOpen()){Event event;while (window.pollEvent(event)){if (event.type == Event::Closed)window.close();}///////////////////////////////if (clock.getElapsedTime().asMilliseconds() >= 999)// если прошла секунда, отнимаем 1 секунду у таймера{timer(hour, min, sec);clock.restart(); // начинаем измерять заново}hourText.setString(intToString(hour)); minText.setString(intToString(min)); secText.setString(intToString(sec));// из int в string из string в Text//////////// вывод на экран/////////////////////window.clear();text1.setPosition(150, 200); window.draw(text1);//двоеточиеwindow.draw(hourText); //рисуем часыtext1.setPosition(250, 200); window.draw(text1);//двоеточиеwindow.draw(minText); //рисуем минутыwindow.draw(secText);// и секундыwindow.display();// все вывести на экран}}все) понял как ввести данные , с клавиатуры
Как?)
<pre class=”lang:c++ decode:true ” >if (Keyboard::isKeyPressed(Keyboard::Num1))
то 1; как то так.Тема мне помогла, спасибо. Только я хочу сделать таймер вида 00:00:00. Как этого можно добиться? Что-то не могу сам сообразить.
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.