I think you should use Delta Timing to be perfeclty honest. I don't think there is anyhting you plan to do which would not work with it. Even if your characters are geosprites (a set of fixed 3d meshes each of which represents one frame of animation, as used in Quake 1) there's no reason why you can't move them smoothly through the world while changing the frame of animation being displayed at a fixed rate. Sure, the animation might display a frame a tiny bit learly or a tiny bit late, but only a tiny bit. You wouldn't notice the difference. Of course you WOULD stil notice that the animation is choppy.
As for what framerate to choose if you want to do a fixed framerate system, I can't really offer you a concret choice. It depends on your needs and what you are going to do. What the lowest system you want to support is.
The higher the framerate the more frames you need for 2D animations or geosprite animations. The memory costs for this can quickly grow.
If memory isn't an issue, then what you could do is make your animations run at 60fps, and then on low end computers drop every other frame if the PC can only render at 30fps, or drop every third frame if it can only render at 20, and every fourth if it can only render at 15. With a framerate of 30fps, then you're really limited to only 30fps or 15fps, neither of which are very smooth. And if you use 45 fps, then you're stuck with only 45 fps.
You also need to consider how fast the monitor refreshes though. A monitor might refresh at 60, 65, 70, 72, 75, 80, or 85hz. Those are the most common rates as far as I know. I think the standard right now is 85hz though.
The reason you need to consider this is because if you wait for the vertical refresh when flipping then you have to wait for the monitor. And if the monitor runs at a different refresh rate than your game, then you might end up running at a lower FPS than normal.
For example, if I have a 3D game, and I am using delta time, but also using flip true, then even though my game could in theory run at 60fps, if my monitor updates at 85hz, I might find that my game is only actually running at 42 fps because it keeps having to wait for the monitor and wastes half a frame waiting for it every other frame.
There is no real way to solve that problem that I know of, other than to turn off waiting for the vertical refresh, but that can lead to tearing. On monitors at least. I don't know how LCD screens react to it.
Anyway, as you can see there are a lot of issues to consider. I personally use Delta Time with a max framerate limiter so I can give some CPU time back to windows.
As for what framerate to choose if you want to do a fixed framerate system, I can't really offer you a concret choice. It depends on your needs and what you are going to do. What the lowest system you want to support is.
The higher the framerate the more frames you need for 2D animations or geosprite animations. The memory costs for this can quickly grow.
If memory isn't an issue, then what you could do is make your animations run at 60fps, and then on low end computers drop every other frame if the PC can only render at 30fps, or drop every third frame if it can only render at 20, and every fourth if it can only render at 15. With a framerate of 30fps, then you're really limited to only 30fps or 15fps, neither of which are very smooth. And if you use 45 fps, then you're stuck with only 45 fps.
You also need to consider how fast the monitor refreshes though. A monitor might refresh at 60, 65, 70, 72, 75, 80, or 85hz. Those are the most common rates as far as I know. I think the standard right now is 85hz though.
The reason you need to consider this is because if you wait for the vertical refresh when flipping then you have to wait for the monitor. And if the monitor runs at a different refresh rate than your game, then you might end up running at a lower FPS than normal.
For example, if I have a 3D game, and I am using delta time, but also using flip true, then even though my game could in theory run at 60fps, if my monitor updates at 85hz, I might find that my game is only actually running at 42 fps because it keeps having to wait for the monitor and wastes half a frame waiting for it every other frame.
There is no real way to solve that problem that I know of, other than to turn off waiting for the vertical refresh, but that can lead to tearing. On monitors at least. I don't know how LCD screens react to it.
Anyway, as you can see there are a lot of issues to consider. I personally use Delta Time with a max framerate limiter so I can give some CPU time back to windows.
Const MAX_FPS = 60 ; Timer Global Frame_Period = Floor(1000.0/Float(MAX_FPS)) ; The minimum number of milliseconds we want each frame to last. Global Current_Time Global Time_Delta_Sec# Current_Time = MilliSecs() Game_Start_Time = Current_Time Repeat ClsColor 0, 0, 0 Cls Gosub Get_Input ; We get input before calculating the start time of this frame so that we can pause the game in the event handler if the app loses focus, and correct the time elpased since the last frame. Repeat Time_Old = Current_Time ; Store start time of this frame. Current_Time = MilliSecs() ; Get the current time. ALWAYS read this in other parts of the program to get the time instead of millisecs(), or else the pause code to pause the app when minimized will not have the proper effect on other parts of the game! Time_Delta = Current_Time - Time_Old ; Calculate diffrence in start time between this frame and the last. Time_Delta_Sec# = Float(Time_Delta)/1000.0 ; Convert frame duration to seconds. Until (Time_Delta > 0) And (Time_Delta < 200) ; Handle unnaturally long pauses between frames gracefully. Gosub Update_Game SetBuffer Back_Buffer ; Make sure all drawing operations go to the right buffer. AniBOB_Update(Time_Delta) ; Move the BOBS which are animated with the AniBOB system. UpdateBOBS() ; Draw the BOBS. Gosub Draw_Text If Windowed ; Flip backbuffer to front. FlipCanvas Window_Canvas, True Else Flip True EndIf Time_Passed = MilliSecs()-Current_Time ; Calculate how long this frame took to render including the flip. Time_Left = Frame_Period-Time_Passed ; Calculate the amount of additional time we should wait to stay below MAX_FPS. If Time_Left < 0 Then Time_Left = 0 ; Delay if there is remaining time. Delay(Time_Left) Forever