iMiniB3D Tween Code driving me mad
BlitzMax Forums/MiniB3D Module/iMiniB3D Tween Code driving me mad
| ||
| *** C++ Typo *** Please delete this post, Sorry, Rob Last edited 2012 |
| ||
| In that case I have to delete my advice, which was really just guesswork. Among other things I suggested you need 64-bit integers. That means using long long since a C++ long is ( probably ) 32-bit. |
| ||
| That was the answer ;-). I will post up the code i came up with in a bit so you can see what i came up with ... |
| ||
| Wait... iminiB3D supports tweening? I must have missed something. |
| ||
| Sorry, Tweening is probably the wrong word. I was trying to get a constant movement rate e.g. If 60 frames per second, move object by 0.5, if 30 frames per second, move by 1 etc: Anyway, this seems to work ok, but any improvements would be most welcome...
...
// Number of frames expected per second
const int FPS=30;
double nLastTime;
double nLastTime = [[NSDate date] timeIntervalSince1970];
float playermove=2.0f
i
...
Then called before Update and Render in RUN...
void Game::UpdateGame(){
double currTime = [[NSDate date] timeIntervalSince1970];
float timeThisSecond = (float)(currTime - nLastTime);
nLastTime = currTime;
float nMove = (float)((timeThisSecond * 1000) / FPS);
mesh->TurnEntity(nMove * playermove,0,0);
}
Last edited 2012 |
| ||
| Ok, so my main issue is that on the iPhone, Milliseconds are stored as a double. E.g, 1500 Milliseconds is 1.5 on the iPhone, 1.0f is 1 second. If any interest, here is my code for "Time Based Movement" and "Frames Per Second"
.h:
double nLastTime;
double m_FPS_lastSecondStart;
int m_FPS_FramesThisSecond;
int m_FPS;
const int nFPS = 30;
.mm:
void Game::UpdateFPS()
{
double currTime = [[NSDate date] timeIntervalSince1970];
m_FPS_FramesThisSecond++;
float timeThisSecond = currTime - m_FPS_lastSecondStart;
if(timeThisSecond > 1.0f ) {
m_FPS = m_FPS_FramesThisSecond;
m_FPS_FramesThisSecond = 0;
m_FPS_lastSecondStart = currTime;
// m_FPS now contains Frames Per Second
}
}
void Game::UpdateGame(){
double currTime = [[NSDate date] timeIntervalSince1970];
float timeThisSecond = currTime - nLastTime;
nLastTime = currTime;
// Example Move Player
float nMove = ((timeThisSecond / nFPS) * 1000);
mesh->TurnEntity(nMove * playermove,0,0);
}
Last edited 2012 |
| ||
| There is a Millisecs() commands in iminib3d. |
| ||
lol, awesome, thanks:
long currTime = Millisecs();
m_FPS_FramesThisSecond++;
long timeThisSecond = currTime - m_lasttime;
if(timeThisSecond > 1000 ) {
m_FPS = m_FPS_FramesThisSecond;
m_FPS_FramesThisSecond = 0;
m_lasttime = currTime;
tmp->ChangeText(ToString(m_FPS));
}
....
long currTime = Millisecs();
float timeThisSecond = currTime - lastTimeLong;
lastTimeLong = currTime;
float nMove = playermove * (timeThisSecond / nFPS);
mesh->TurnEntity(nMove,0,0);
Last edited 2012 |