Is 30 fps OnRender() with 60 fps OnUpdate() doable
Monkey Targets Forums/Flash/Is 30 fps OnRender() with 60 fps OnUpdate() doable
| ||
To get good touch input at 60 fps in OnUpdate() and better animation at 30 fps in OnRender() for low CPU powered devices, is there a way to set games at 60 fps but skip OnRender() half of the time? |
| ||
If you set the UpdateRate to 60, Monkey will make it's best to call 60 updates per second and, as many as possible (30?) renders per second, depending on hardware. So, it's not only possible but, in fact, it's the way Monkey works. If you set UpdateRate(60), it will update at 60 FPS and render as close as possible to 60 FPS. If the closest it can get is 30FPS, it'll be rendered at 30 FPS, while keeping updates at 60. |
| ||
is there a way to set games at 60 fps but skip OnRender() half of the time? Try this if you want it for Flash target (has problems with GLFW): Import mojo Class Game Extends App Method OnCreate:Int() SetUpdateRate(60) Return 0 End Method OnUpdate:Int() counter_1 += 1 If KeyHit(KEY_ESCAPE) Then EndApp Return 0 End Method OnRender:Int() skip_render ~= 1 If skip_render Then Return 0 counter_2 += 1 ' rendering... Cls(64,64,64) DrawText(String(counter_1),10,10) DrawText(String(counter_2),10,30) Return 0 End Private Field skip_render:Int = 0 Field counter_1:Int Field counter_2:Int End Function Main:Int() New Game Return 0 End counter_1 and counter_2 are just for testing. You just need the skip_render stuff in OnRender(). |
| ||
Thanks for the useful info. |
| ||
tried this html5,flash,android -- work GLFW,W8 -- displaying flashing background here. |
| ||
Yes, you can't avoid renders on GLFW as the backbuffer is not warrantied to keep it's contents after every frame. But, honestly, as I said in the first answer, you don't need this. Monkey does already adjust rendering and updating for you. SetUpdateRate(60) means: Call update 60 times per second Call render as closely as 60 times per second, if the hardware allows it, and the rendering is not too slow. In case the rendering is too slow, or the machine can't support 60 Hhz on screen device, you'll get more updates than renders per second, so the logic of the game is kept. If you SetUpdateRate(60) on a device that only supports 30FPS, you'll get two updates for every render. I think that's what you where trying to achieve and the good news is that you don't need to do it. It's already designed this way. |