LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Вот смотри, ты нарисовал первый кадр, сделал sleep(16.66) (это единственный раз когда слип должен быть именно таким), затем нарисовал второй и собираешься делать sleep опять. Смотришь текущее время - оно 21.4809. Знаешь, что третий кадр нужен на 33.32. Значит sleep надо ставить на 33.3200-21.4809 = 11.8391 мс. Нарисовал третий кадр, смотришь время - оно окажется какое-нить 37. Опять считаешь 49.98-37 = 12.98 - делаешь именно такой sleep. Никакие бенчмарки заранее проводить не нужно, просто на каждом кадре считай когда должен быть следующий описанным способом. В итоге разница между двумя соседними кадрами всегда будет именно такой как ты хочешь +- небольшие отклонения, которые усредняются в ноль.

То, что твой текущий способ (sleep без проверки времени) работает на винде - это считай везение: у тебя игра жрёт не сильно много проца, комп наверно мощный, и на компе ничего тяжёлого рядом не запущено. Как только нагрузка на проц вырастет, оно и на винде скорее всего поплывёт.

Исправление firkax, :

Вот смотри, ты нарисовал первый кадр и собираешься делать sleep. Смотришь текущее время - оно 21.4809. Знаешь, что второй кадр нужен на 33.32. Значит sleep надо ставить на 33.3200-21.4809 = 11.8391 мс. Нарисовал второй кадр, смотришь время - оно окажется какое-нить 37. Опять считаешь 49.98-37 = 12.98 - делаешь именно такой sleep. Никакие бенчмарки заранее проводить не нужно, просто на каждом кадре считай когда должен быть следующий описанным способом. В итоге разница между двумя соседними кадрами всегда будет именно такой как ты хочешь +- небольшие отклонения, которые усредняются в ноль.

То, что твой текущий способ (sleep без проверки времени) работает на винде - это считай везение: у тебя игра жрёт не сильно много проца, комп наверно мощный, и на компе ничего тяжёлого рядом не запущено. Как только нагрузка на проц вырастет, оно и на винде скорее всего поплывёт.

Исходная версия firkax, :

Вот смотри, ты нарисовал первый кадр и собираешься делать sleep. Смотришь текущее время - оно 21.4809. Знаешь, что второй кадр нужен на 33.32. Значит sleep надо ставить на 33.3200-21.4809 = 11.8391 мс. Нарисовал второй кадр, смотришь время - оно окажется какое-нить 37. Опять считаешь 49.98-37 = 12.98 - делаешь именно такой sleep. Никакие бенчмарки заранее проводить не нужно, просто на каждом кадре считай когда должен быть следующий описанным способом. В итоге разница между двумя соседними кадрами всегда будет именно такой как ты хочешь.

То, что твой текущий способ (sleep без проверки времени) работает на винде - это считай везение: у тебя игра жрёт не сильно много проца, комп наверно мощный, и на компе ничего тяжёлого рядом не запущено. Как только нагрузка на проц вырастет, оно и на винде скорее всего поплывёт.