Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
#1

GetFrameTime() выдает нормальное время кадра только со второго прохода по циклу - C++

11.08.2014, 16:46. Просмотров 314. Ответов 3
Метки нет (Все метки)

C++
1
2
3
4
5
while(1)
{
frameTime = GetFrameTime(); // есть функция возвращает время 1 кадра.
func1(frametime); // в эту функцию отправляется время 1 кадра чтобы регулировать скорости  от фпс.
}
Беда в том что GetFrameTime() выдает нормальное время кадра только со второго прохода по циклу. Так как dt не имеет frameTimeOld:
C++
1
2
dt = currentTime.QuadPart-frameTimeOld; 
frameTimeOld = currentTime.QuadPart;
Сама же беда заключается в том, что когда вот это омг какое первое возвращаемое значение попадает в func1.
Значения типа (t+=1*frametime) прыгают в певом же кадре на нереально большое значение.
И вместо отсчета с (0я+1*frametime) мы получаем к примеру (3215+1*frametime). Что ясен пень не ок для нас.

2 вопроса:

1. Как это исправить в общем - в самих функциях времени?

2. Я исправил это вот так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
/*добавил пару global*/ float counter(0),s(0);
 
while(1){
frameTime = GetFrameTime(); // есть функция возвращает время 1 кадра.
 
counter++; // ok костыль,
if(counter>1){s=frameTime;counter=2;}
 
func1(s);

Но хотелось бы избежать дополнительных проверок и действий.
Какие у вас есть более эффективные варианты?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2014, 16:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос GetFrameTime() выдает нормальное время кадра только со второго прохода по циклу (C++):

Цикл срабатывает только после второго прохода - 1С
Процедура ПередЗаписью(Режим, Отказ) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПланЗатратНаМесяц.СуммаДокумента, ...

Замедление прохода по циклу - VBA
Здравствуйте, уважаемые программисты. Помогите решить проблему. У меня на листе есть таймер, запускающийся кнопками Старт-Стоп. ...

Как в цикле ForEach после каждого второго прохода добавить какое-то действие - PHP
как в цикле после каждого второго прохода добавить какое то действие. например, echo 'hello';

Можно ли считать, что время безотказной работы этого прибора имеет нормальное распределение? - Теория вероятностей
здрасвуйте, как решит это задача?? следующая информация представляют собой время безотказной работы электронного прибора. выясните, можно...

Нужно нормальное бинарное дерево поиска. Нужны только функци добавить и поиск - C#
бинарное дерево поиска нужны только функции только добавить и поиск Прошу с коментариями если возможно ((( как там происходит поиск ....

Через какое время после начала движения нормальное ускорение точки будет в два раза больше тангенциального? - Механика
Плиз, помогите решить задачку! Точка движется по окружности радиусом 22,5 см с постоянным тангециальным ускорением 5см/с^2. Через какое...

3
BlackIce
310 / 172 / 64
Регистрация: 18.01.2014
Сообщений: 387
11.08.2014, 17:32 #2
Что мешает frameTimeOld инициализировать перед первым вызовом GetFrameTime() ?
0
TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
11.08.2014, 21:56  [ТС] #3
супер отрицательным числом развечто так как в функции есть проверка на dt < 0. Хотя отрицательного в принципе быть не может после первого кадра...
0
BlackIce
310 / 172 / 64
Регистрация: 18.01.2014
Сообщений: 387
11.08.2014, 22:31 #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    LARGE_INTEGER StartingTime, EndingTime, ElapsedMicroseconds;
    LARGE_INTEGER Frequency;
 
    QueryPerformanceFrequency(&Frequency);
    // инициализируем StartingTime
    QueryPerformanceCounter(&StartingTime);
 
    for (;;) {
        // выполняем какие-то действия
        ...
        
        // меряем время
        QueryPerformanceCounter(&EndingTime);
        ElapsedMicroseconds.QuadPart = EndingTime.QuadPart - StartingTime.QuadPart;
 
        ElapsedMicroseconds.QuadPart *= 1000000;
        ElapsedMicroseconds.QuadPart /= Frequency.QuadPart;
 
        StartingTime.QuadPart = EndingTime.QuadPart;
 
        // ElapsedMicroseconds -- время цикла в микросекундах
    }
0
11.08.2014, 22:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2014, 22:31
Привет! Вот еще темы с ответами:

Программа не выдает значение элементов второго массива - Delphi
в чем ошибка?(программа не выдает значение элементов второго массива, а также закрывается при попытке установить первый массив = 3 или...

Как взять из БД только время или только дату? - PHP БД
datetime приходит из БД, как теперь взять отсюда только время и только дату? пробовал так, не получилось: $date = date('m-d-Y',...

тормозят игры на ноуте любые когда он не зарежается , как только начинает заряжаться становить все норм . это нормальное явления - Ноутбуки
виснуть игры на ноуте любые когда он не зарежается , как только начинает заряжаться становить все норм . это нормальное явления


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.