C ++控制台中基于实时的增量/减量

有没有办法在不使用第三方库的情况下,在简单的C ++控制台应用程序中实时增加/减lessvariables的值。

例如在Unity3D游戏引擎中,有一些叫做Time.DeltaTime的东西给出了完成最后一帧的时间。 现在,我明白,在控制台应用程序中没有绘制更新函数或框架,但是我正在尝试做的是能够递增/递减variables的值,使得它随着时间的变化而变化,

variables= 0
variables=variables+ Time.DeltaTime

以便variables值每秒递增。 在C ++ 11中是这样的吗? 所以说,如果速度是5,那么在5秒之后,variables的值是5。

基本上,我正在创build一个简单的粒子系统,我希望粒子在达到MAX_AGE后死亡。 我不知道如何在一个简单的C ++控制台应用程序中实现。

对于简单的时间,你可以使用std :: chrono :: system_clock 。 tbb :: tick_count是一个更好的delta计时器,但你说没有第三方库。

如你所知,德尔塔时间是最后的时间,减去原来的时间。

dt= t-t0 

然而,这个增量时间只是速度变化时经过的时间量。

函数的导数表示函数的一个变量的无穷小变化。 函数关于变量的导数被定义为

  f(x + h) - f(x) f'(x) = lim ----------------- h->0 h 

首先你得到一个时间, NewTime = timeGetTime()

然后你从刚刚得到的新时间中减去旧时间。 称之为增量时间, dt

 OldTime = NewTime; dt = (float) (NewTime - OldTime)/1000; 

现在你把dt加到totaltime

TotalTime += dt

所以当TotalTime达到5时,就结束了粒子的寿命。

 if(TotalTime >= 5.0f){ //particles to die after their MAX_AGE is reached TotalTime=0; } 

更有趣的阅读:

http://gafferongames.com/game-physics/

http://gafferongames.com/game-physics/integration-basics/

Windows示例代码:

 #include<time.h> #include<stdlib.h> #include<stdio.h> #include<windows.h> #pragma comment(lib,"winmm.lib") void gotoxy(int x, int y); void StepSimulation(float dt); int main(){ int NewTime = 0; int OldTime = 0; int StartTime = 0; int TimeToLive = 5000; //// TimeToLive 5 seconds float dt = 0; float TotalTime = 0; int FrameCounter = 0; int RENDER_FRAME_COUNT = 60; // reset TimeToLive StartTime = timeGetTime(); while(true){ NewTime = timeGetTime(); dt = (float) (NewTime - OldTime)/1000; //delta time OldTime = NewTime; // print to screen TimeToLive gotoxy(1,1); printf("NewTime - StartTime = %d ", NewTime - StartTime ); if ( (NewTime - StartTime ) >= TimeToLive){ // reset TimeToLive StartTime = timeGetTime(); } // The rest of the timestep and 60fps lock if (dt > (0.016f)) dt = (0.016f); //delta time if (dt < 0.001f) dt = 0.001f; TotalTime += dt; if(TotalTime >= 5.0f){ TotalTime=0; StepSimulation(dt); } if(FrameCounter >= RENDER_FRAME_COUNT){ // draw stuff //Render(); gotoxy(1,3); printf("OldTime = %d \n",OldTime); printf("NewTime = %d \n",NewTime); printf("dt = %f \n",dt); printf("TotalTime = %f \n",TotalTime); printf("FrameCounter = %d fps\n",FrameCounter); printf(" \n"); FrameCounter = 0; } else{ gotoxy(22,7); printf("%d ",FrameCounter); FrameCounter++; } } return 0; } void gotoxy(int x, int y){ COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); return; } void StepSimulation(float dt){ // calculate stuff //vVelocity += Ae * dt; }