Форум программистов, компьютерный форум CyberForum.ru

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

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

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

11.08.2014, 16:46. Просмотров 270. Ответов 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);

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

Ошибку выдает программа во время работы - C++
Программа должна открывать файл и искать заданное пользователем слово Вот код: #include <iostream> #include <string> #include...

выдает только одно решение - C++
как сделать что бы выдавало все возможные решения? #pragma argsused #include <stdio.h> #include <stdlib.h> int A, fl; int...

программа выдает только черный экран - C++
программа по идее должна реализовать функцию обмена местами для переменных типа int, double, float, int* , но в результате работы выводит...

Очень странная ошибка: Функция gets() вызывается только со второго раза - C++
Нужно написать класс, в объект которого (в массив строк) вводятся несколько фамилий Для записи использую функцию gets() Проблема в том,...

После первого прохода появляются баги - C++
Если вызвать функцию enter(), первый раз все хорошо, но если вызвать ее еще раз, то первый ввод строки пропускатеся и другие косяки бывают....

Записать в третий файл только те пары чисел, в которых число из первого файла меньше соответствующего числа из второго файла. - C++
Дано два файла, содержащих одинаковое количество целых чисел. Записать из них в третий файл только те пары чисел, в которых число из...

Запись в файл. После прохода программы содержимое файла не то, что нужно - C++
Подскажите пожалуйста в чем ошибка, мне нужно, чтобы данные, которые выводятся на экран записывались в файл, но после прохода программы в...

Надо чтобы пользователь вводил время только в секундах,вместо часов,минут и секунд - C++
Надо чтобы пользователь вводил время только в секундах,вместо часов,минут и секунд,заранее спасибо #include <iostream> #include...

Метод для прохода по вектору сложного класса определения и удаления не нужных элементов - C++
Собственно неработающий метод: void OfficeTovarCollection::plusifneed(){ vector<OfficeTovar>:: iterator it1=begin(); ...

За допомогою циклу while!! - C++
Допоможіть розвязати таку задачу!! Нехай дано число н. Необхідно вивести на екран всі точні (цілі квадрати) натуральних чисел, які не...

Блок-схема по циклу - C++
Дана матрица А(nxn). Написать программу, которая находит максимальный по абсолютной величине элемент и переставляет строки и столбцы так,...

Два вопроса по циклу for - C++
1. Нужно два условия и два модификатора в цикле for. Правильно ли я делаю? for (int j=0, k=0; j<n && k<m; j++, k++) { //Работа цикла ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BlackIce
310 / 172 / 64
Регистрация: 18.01.2014
Сообщений: 387
11.08.2014, 17:32     GetFrameTime() выдает нормальное время кадра только со второго прохода по циклу #2
Что мешает frameTimeOld инициализировать перед первым вызовом GetFrameTime() ?
TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
11.08.2014, 21:56  [ТС]     GetFrameTime() выдает нормальное время кадра только со второго прохода по циклу #3
супер отрицательным числом развечто так как в функции есть проверка на dt < 0. Хотя отрицательного в принципе быть не может после первого кадра...
BlackIce
310 / 172 / 64
Регистрация: 18.01.2014
Сообщений: 387
11.08.2014, 22:31     GetFrameTime() выдает нормальное время кадра только со второго прохода по циклу #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 -- время цикла в микросекундах
    }
Yandex
Объявления
11.08.2014, 22:31     GetFrameTime() выдает нормальное время кадра только со второго прохода по циклу
Ответ Создать тему
Опции темы

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