Перейти к содержанию

Проблема при подсчете ФПС . с++ VS 2012


Рекомендуемые сообщения

Немного изменил исходный код под себя


float fFps = 0; // переменная для основного ФПС
float fLastTickCount = 0;// - переменная последнего отсчета
float fCurrentTickCount; // переменная не знаю как правильно объяснить
char cFrameRate[50] = {NULL}; - убрал


char *cFps() - сама функция
{
fCurrentTickCount = clock() * 0.001f;// время на компе * 0.001.
++fFps; переменная ФПС +1
if((fCurrentTickCount - fLastTickCount) > 1.0f)
{
fLastTickCount = fCurrentTickCount;

FPSText(10, 120, SKYBLUE,dMenu.pFont, "%d",int(fFps)); // все парвильно выводит -НО значение мерцает постоянно, в чем проблема объясните пожалуйста

//sprintf( cFrameRate, "Framerate: %d", int( fFps ) ); - убрал
fFps = 0;

}

return cFrameRate;

}

Ссылка на комментарий
Поделиться на другие сайты

Да ну блин, сколько можно? В будущем подобные темы буду закрывать без предупреждения. Либо предоставляете МАКСИМУМ информации (как то - название и версия игры, и полностью код, в котором возникает ошибка, а также, при каких обстоятельствах), либо не получите НИКАКОЙ помощи!

Ссылка на комментарий
Поделиться на другие сайты

Да ну блин, сколько можно? В будущем подобные темы буду закрывать без предупреждения. Либо предоставляете МАКСИМУМ информации (как то - название и версия игры, и полностью код, в котором возникает ошибка, а также, при каких обстоятельствах), либо не получите НИКАКОЙ помощи!

Причем сдесь название игры и версия???? Подсчет ФПС это общее - для всех игр подходит , поставить этот код на вормс3д или же на КС - одно и тоже , суть проблемы не в том , суть проблемы в коде ,а имеено

FPSText(10, 120, SKYBLUE,dMenu.pFont, "%d",int(fFps));

при выводе на экран значения ФПС.

С помощью какой функции я вывожу значения на экран????

void FPSText(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2, ... )

{

char buf[1024];

RECT FontRect = { x, y, x+800, y+50 };//500 30

va_list vaList;

va_start(vaList, pString2);

vsprintf_s(buf, pString2, vaList);

va_end(vaList);

pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);

}

Игра фаркрай, какую еще инфу предоставить????

Ссылка на комментарий
Поделиться на другие сайты

Мерцает, скорее всего, потому, что, судя по всему, используются функции GDI для вывода FPS. А игра использует DirectX. Отсюда и мерцание.

через директ Х вроде бы все рисую - там стандартный вывод был

sprintf( cFrameRate, "Framerate: %d", int( fFps ) );

я заменил на свой

FPSText(10, 120, SKYBLUE,dMenu.pFont, "%d",int(fFps));

Ссылка на комментарий
Поделиться на другие сайты

через директ Х вроде бы все рисую - там стандартный вывод был

sprintf( cFrameRate, "Framerate: %d", int( fFps ) );

я заменил на свой

FPSText(10, 120, SKYBLUE,dMenu.pFont, "%d",int(fFps));

Очевидно же, что ты не рисуешь в перехваченной EndScene, отсюда и мерцание.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

А я шоколадку съел. И от этого рисоваться в EndScene не стало.

ешь , ешь она для мозгов полезна , если что , а

рисую я в энд саин и все равно мерцает

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

тему можно закрыть - написал свою собственную функцию подсчета ФПС,кому интересно код ниже:

создаем переменные для подсчета

int  FPScounter = 0;
float FPSfLastTickCount = 0.0f;
float FPSfCurrentTickCount = 0.0f;
int timerFPS;

создаем функцию войд в потоке желательно(она нечего не возвращает , просто считает ФПС), если вы не знаете что такое поток ,сделайте цикл "for"

void FPS()
{
FPSfCurrentTickCount = clock() * 0.001f;
FPScounter++;
if((FPSfCurrentTickCount - FPSfLastTickCount) > 1.0f)
{
FPSfLastTickCount = FPSfCurrentTickCount;
timerFPS=FPScounter;
FPScounter = 0;
}
PrintText2(1, 1, SKYBLUE,dMenu.pFont, "%d",timerFPS);//Выводим с помощью стандартной функции принт текст
}

не забываем подключать

#include <time.h>

- заголовочный файл содержащий типы и функции для работы с датой и временем.

функция принт текст , спасибо отдельное Армандо за предоставленную функцию.

void PrintText2(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2, ... ) // тут вам нужно главное указать "где рисовать",в моем случае pFont.
{
char buf[1024];
RECT FontRect = { x, y, x+800, y+50 };//500 30
va_list vaList;
va_start(vaList, pString2);
vsprintf_s(buf, pString2, vaList);
va_end(vaList);
pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);
}

Ссылка на комментарий
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.