SFML и C++ Уроки \ Разработка игр › Форумы › SFML Начало работы (подключение и настройка) › Загрузка ЦП
В этой теме 9 ответов, 5 участников, последнее обновление yuriy 8 года/лет, 1 месяц назад.
-
АвторСообщения
-
Из-за цикла while очень сильно перегружается ЦП, лично у меня он нагружается на столько, что сравнимо с хорошей онлайн-клиент игрой.
Что посоветуете?
Скинь код, чтоб посмотреть.
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), “Lesson 1. kychka-pc.ru”);
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}window.clear();
window.draw(shape);
window.display();
}return 0;
}У тебя именно процессор грузит ? или сама программа лагает ?
Используйте кнопку вставки кода
Всё нормально работает, но такие “лёгкие” игры не должны жрать 20% ЦП на современных компах
мы тут посоветовались с программистами, и пришли к выводу что это while (window.isOpen()) виноват, т.к. он доимного раз выполняется, что нагружает процессор.
Мб есть какой вариант типа speep(50) ?
У меня игра с большей картой, множеством объектов на ней(как статических так и динамических). если запускаю через visual studio то 40 % загрузки цп, если просто из папки дебаг, без VS то 25 %. Проц мой intel core 2 quad q8200( весьма старый ).
Заранее извиняюсь, что подымаю старую тему, но появилось что сказать по этой теме. Я не измерял нагрузку на ЦП, у меня была проблема другого характера – очень низкий FPS. Причём на аналоичном тестовом коде. Я заметил, что при движении мышкой по окну FPS проседал вплодь до 0,5! Покопавшись, таки нашёл причину. Вот это место:
C++1234while(window.pollEvent(event)){if(event.type == sf::Event::Closed)window.close();}Если я правильно разобрался, то мы отлавливаем все события, а обрабатываем только закрытие окна. Но этот цикл не даёт продолжить, пока все события не будут обработаны. Возможно такая проблема только у меня. (Я программирую под Linux) В моём случае просто заменил на этот код:
C++12if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))window.close();FPS поднялся до 2500. Но окно теперь закрывается только по Escape, хотя в случае моей “игры” это не критично.
Если кто с подобным сталкивался и нашёл более лаконичное решение, напишите.
Ну и чтобы по теме ответить, замерил нагрузку. При FPS 2500 у меня нагрузка ~50%
Сделал так:
C++1window.setFramerateLimit(30);…и нагрузка ~5%
ещё можно
C++1window.setVerticalSyncEnabled (true); -
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.