This is pretty simple actually.
It takes time to create a scene (milliseconds, but still time). If you’re using a scene manager like composer you may be transitioning the scene on screen (fade from black, crossFade with the previous scene, slide on to the screen, etc.) These take times again, usually in milliseconds but time that is visible and after the first frame update after you created the scene.
Take the “HelloPhysics” sample (doesn’t use a scene manager) for example. If you are doing this using Composer, you would likely have a menu scene with a play button and then fade the game scene in over say 500ms (half a second).
If the physics simulation is actually running while scene:create() is finishing or any time before scene:show() provide’s a “did” phase (meaning the scene is fully on screen and ready to interact with), that crate will fall to the ground before anyone see’s the game scene. Scenes can also be preloaded which calls scene:create(). This means you can’t really trust that the user is ready to interact with the scene while scene:create() runs and completes. The only true signal that the scene is ready for interaction to wait on scene:show()'s “did” phase.
You wouldn’t want to frustrate your users by having your aliens blast them before you see them or your zombies eating them before they ever see the scene.
However, you have to call physics.start() before you can add physics bodies. So pausing physics will stop the simulation and still let you add your physics bodies. When you’re ready for the simulation to start for real (i.e. scene:show()'s “did” phase, then you call physics.start() again to unpause physics and let the world take off for you.
Rob