Performance with Box2D

Monkey Targets Forums/Android/Performance with Box2D

FelipeA(Posted 2012) [#1]
Hello, I was wondering if anyone has made a game for android using monkey-box2D. I've been doing some tests on a Samsung Galaxy S2 and it runs very choppy. Sometimes the FPS goes from 60 to 20 and then it stays at 25-35 for a while.

I am running this test which runs good on my pc(html5, flash and glfw): http://shin.cl/b2d/ , but on android it just runs very very slow.

What have your performance tests been like with box2d on android, and what do you recomend to improve speed.

Thanks!


muddy_shoes(Posted 2012) [#2]
You need to run a profile to see where the time is going. I don't see 30fps as "very slow" to be honest but equally your example doesn't look much of a physics processing strain for a reasonably powerful device.

Profiling your HTML5 build did point out something a little odd: 13% of the processing time was going to SetPosition. That seems to come from this bit of your update:

var t_=bb_main_world.f_entities.m_ObjectEnumerator();
while(t_.m_HasNext()){
var t_e=t_.m_NextObject();
var t_pos=t_e.f_body.m_GetPosition();
t_pos.f_x=t_pos.f_x-this.f_offset.f_x;
t_pos.f_y=t_pos.f_y-this.f_offset.f_y;
t_e.f_body.m_SetPosition(t_pos);
}

Are you repositioning every object in the world on every update?


FelipeA(Posted 2012) [#3]
Yes I am, i am doing this to give the camera effect. If there is a better way for this could you point me how or where to find a reference?? This is my first time working with box2D.
Thanks


muddy_shoes(Posted 2012) [#4]
Just have a camera object and offset the rendering rather than moving objects in the world. Every time you move an object in box2d it has to recalculate a bunch of stuff to do with collisions etc.


FelipeA(Posted 2012) [#5]
Ooh, yeah that sounds a lot smarter, I'm actually not handling the render, I am using CopperCircle's box2dframework so I'll have to "hack it". I'll see how it works after doing all this.
Thanks


muddy_shoes(Posted 2012) [#6]
You can probably just use mojo's translate matrix function to shift everything to centre on the player before you call the render loop.


FelipeA(Posted 2012) [#7]
Thanks a lot, that was really a preformance boost. Now the demo runs at 60fps on all targets.

Thanks!


CopperCircle(Posted 2012) [#8]
Hi do you have an example of the translate matrix scrolling? did you get it to work with my framework?


golomp(Posted 2012) [#9]
+1