Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Does having a lot of physic collisions cause codea crashes?

edited December 2014 in Questions Posts: 136

I know that creating physic bodies in the draw function or functions called in the draw function crashes codea easily, and my code is proof of that, but what I do have is about 25 physic bodies, circles, and a few edges. My code seems to crash when there is too many collisions. Is this common? Will I have to tone down the collisions somehow or is it possible to avoid these crashes?

edit: i found the reason for the frequent crashes but it still runs really slow.



  • edited December 2014 Posts: 300

    I think we are waiting on an update to fix the slowness. Update was submitted on the 10th.

  • dave1707dave1707 Mod
    Posts: 6,486

    @jrohanian Try running this and see what your frame rate is. The frame rate is at the left side and its height will decrease as the frame rate decreases. Each time the red ball collides with a blue ball, another blue ball is created. The ball count is in the center. Let this run and see what the frame rate is and the ball count. How does this compare to the speed of you're program. My frame rate drops to about 30 when the ball count reaches 500. With several hundred balls, the collision rate is extreamly high.

    displayMode(FULLSCREEN) function setup() physics.continuous=true tab={} -- table for balls for x=1,25 do -- start with 5 balls create() end line1 = physics.body(EDGE,vec2(5,5),vec2(5,HEIGHT-5)) line2 = physics.body(EDGE,vec2(WIDTH-5,5),vec2(WIDTH-5,HEIGHT-5)) line3 = physics.body(EDGE,vec2(5,5),vec2(WIDTH-5,5)) line4 = physics.body(EDGE,vec2(5,HEIGHT-5),vec2(WIDTH-5,HEIGHT-5)) end function create() -- create a new ball in the table local a=#tab+1 tab[a] = physics.body(CIRCLE,10) tab[a].x=math.random(30,WIDTH-30) tab[a].y=math.random(30,HEIGHT-30) tab[a].friction=0 tab[a].gravityScale=0 tab[a].restitution=1 tab[a].linearVelocity=vec2(math.random(-400,400),math.random(-400,400)) end function collide(contact) if contact.state == BEGAN then -- if the red ball is hit, create another ball and sound if contact.bodyA.x == tab[1].x and contact.bodyA.y == tab[1].y then create() end end end function draw() background(50, 50, 50) fill(255) text(#tab,WIDTH/2,HEIGHT/2+20) strokeWidth(0) for z=1,#tab do fill(0, 47, 200, 255) -- color of the blue balls if z == 1 then -- color of the red ball fill(255,0,0) end ellipse(tab[z].x,tab[z].y,20,20) end stroke(255) strokeWidth(5) line(5,5,5,HEIGHT-5) line(WIDTH-5,5,WIDTH-5,HEIGHT-5) line(5,5,WIDTH-5,5) line(5,HEIGHT-5,WIDTH-5,HEIGHT-5) fill(255) text(string.format("%d",1/DeltaTime),50,(1/DeltaTime)*15) end
  • @dave1707 wow that helps

  • Posts: 127

    Hi @dave1707, in my case fps drops to 30 when i have only 100 balls or so, moving on. Using meshes i got the same slow down with much fewer objects moving on the screen.
    What should be, in normal condition, the limit you expect fps to drop at?

  • dave1707dave1707 Mod
    Posts: 6,486

    The FPS will depend on the device you're running this on. On my iPad 1 running version 1.5 of Codea, my frame rate is about 30 with 150 balls. On my iPad Air with version 2.1 of Codea, my frame rate is about 30 with 500 balls. It's also hard to tell exactly the frame rate and ball count. Maybe I'll see if I can change the way I do the frame rate, ball count.

  • Posts: 127

    ok, thanks @dave1707.
    My point, actually is : how do I set my game to run on any device? When shall I stop adding objects on screen? Maybe the game runs fine on Ipad 3 but not on Ipad 2 ( or 1 ).

  • dave1707dave1707 Mod
    Posts: 6,486

    @deactive Check the device type and set hard limits based on that or look at the frame rate as the game is running and limit the objects as the rate goes down. But from tests that I've run, the frame rate can be fine at a certain limit then a couple of seconds later at that limit the ipad completly bogs down and crashes.

Sign In or Register to comment.