Я сделал игру, но я не знаю, будет ли игра работать одинаково на других устройствах. Например, если процессор компьютера высок, игрок и враги будут двигаться быстрее? Если да, есть ли способ определить использование ЦП в 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
очень эффективен, и даже тогда было бы лучше иметь план на случай непредвиденных обстоятельств.
Для более тщательной обработки я рекомендую вам прочитать связанную статью.
- 1. 32bit cpu: сколько памяти он может использовать?
- 2. Сколько CPU должно использовать Python time.sleep (n) использовать
- 3. Определить поворот в игре
- 4. Как определить идентификатор CPU в gcc
- 5. Как определить, сколько scrollTop?
- 6. Сколько потоков в Java 2D-игре?
- 7. Сколько циклов cpu создает объект в java?
- 8. Как определить агрессивность игрока в игре?
- 9. Как определить «победу» в игре «Сапер»?
- 10. SFML 2.1/C++ принять текст пользователя в игре
- 11. 4-я стрелковая справка не работает в игре SFML
- 12. Определить, сколько чисел в строке
- 13. Определить, сколько существует массива?
- 14. Как использовать Http.Context.current() в обещании в игре?
- 15. Как определить, сколько данных осталось в журнале
- 16. Как быстро определить, сколько цифр в int?
- 17. Как определить, сколько списков включено в список?
- 18. Как определить, сколько минут прошло в javascript
- 19. Как определить, сколько ячеек видно в UITableView
- 20. Определить, сколько пара в списке
- 21. Как использовать multi-cpu в C++?
- 22. используя UTF8 в sfml
- 23. Определить общее количество CPU после qsub в сценарии PBS
- 24. Попытки использовать векторы с SFML
- 25. как использовать securesocial в игре 2.3.0
- 26. Как использовать компаратор в карточной игре
- 27. Как правильно использовать UIView в мини-игре?
- 28. Как использовать планировщик akka в игре 2.0?
- 29. Как использовать AdMob в игре libGdx?
- 30. Как использовать дельта-время в Java-игре?
[Независимое движение кадра] (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