Я сделал игру, но я не знаю, будет ли игра работать одинаково на других устройствах. Например, если процессор компьютера высок, игрок и враги будут двигаться быстрее? Если да, есть ли способ определить использование ЦП в SFML? Способ перемещения игрока и врагов в моей программе: 1-Проверьте, нажата ли клавиша 2-Если это так: move (x, y); Или есть способ заставить CPU выполнять некоторые операции в функции перемещения. Спасибо!Как определить, сколько CPU использовать в игре SFML?
ответ
Похоже, вы обеспокоены тем, что физика вашей игры зависит от частоты кадров игры. Ваша интуиция служит вам хорошо! Это серьезная проблема, и вы захотите обратиться, если хотите, чтобы ваша игра была профессиональной.
Согласно Гленн Фидлер в своей Gaffer on Games статьи 'Fix Your Timestep!'
[A игрового цикла, который обрабатывает время неправильно может сделать] поведение вашего физического моделирования [зависит] от времени дельты вы передаете в. Эффекте мог быть тонким, так как ваша игра имеет немного другое «чувство» в зависимости от частоты кадров, или она может быть такой же экстремальной, как ваше симулятор весны, взрывающийся до бесконечности, быстро движущиеся объекты, проходящие через стены, и игрок, падающий через пол!
Логика требует, чтобы вы отключали зависимости вашего обновления с момента, необходимого для рисования кадра. Простое решение заключается в следующем:
- Выберите количество времени, которое может быть безопасно обработано (ваш Timestep)
- Добавить время прошел каждый кадр в накопленном пул времени
- Процесса время прошло в сейфе ломти
В псевдокоде:
time_pool = 0;
timestep = 0.01; //or whatever is safe for you!
old_time = get_current_time();
while (!closed) {
new_time = get_current_time();
time_pool += new_time - old_time;
old_time = new_time;
handle_input();
while (time_pool > timestep)
{
consume_time(timestep); //update your gamestate
time_pool -= timestep;
}
//note: leftover time is not lost, and will be left in time_pool
render();
}
стоит отметить, что этот метод имеет его собственная проблема: Будущие кадры должны потреблять время, вызванное звонками на consume_time
. Если вызов consume_time
занимает слишком много времени, время, затрачиваемое на время, может потребовать двух вызовов, которые должны быть сделаны в следующем кадре - затем четыре - затем восемь - и так далее. Если вы используете этот метод, вам необходимо убедиться, что consume_time
очень эффективен, и даже тогда было бы лучше иметь план на случай непредвиденных обстоятельств.
Для более тщательной обработки я рекомендую вам прочитать связанную статью.
[Независимое движение кадра] (https://www.google.com/search?ie=UTF-8&q=frame+independent+movement&gws_rd=cr&ei=N_6HV4OsF4myUYWgv9AF&fg=1). Я рекомендую прочитать [this] (http://lazyfoo.net/SDL_tutorials/lesson32/index.php), хотя речь идет о SDL, вы поймете, что происходит – PcAF
Спасибо за ссылку! – QApps