Got some time to post an update on where I am from last nights progress + bits here and there from today. It's finally looking more like a game:
Dinos spawn periodically from both sides - At the moment it's a fixed 5-second frequency so I still need to balance the spawn rate and it needs to get more rapid as Granny progresses.
The terrain is now infinitely generating and granny can only progress towards the right. I've even been a good citizen and cleaned up the resources once they get clipped off the left hand side. Although since the dinos spawn off-screen they do need some kind of ground to land on so there is actually an entry-ramp created for them. Preventing granny from travelling left-wards is done just by adding a large invisible wall to the left; it'll only block granny, the dinos can pass straight through.
I seem to have fixed all my physics related bugs. I had to change to using smooth capsules for granny & the dinos because box2d is not happy to let squares (characters) slide over sequences of squares (the terrain). I gather box2d supports the notion of edge-shapes with "ghost vertices" to support this use-case and I actually wasted some time going off in that direction but it turns out libgdx doesn't currently support the ghost-vertices on edge-shapes, which is a crying shame.
I also had an occasional crash which I worked out through trial-and-error occurred because I was multiply destroying box2d bodies when a bullet collided with >1 dinosaur at once. Since the problem would emanate from within box2d (which is native code wrapped in JNI) it would just completely topple the JVM, seemingly with no exception details or anything - I don't know if there's a good way to handle or debug this kind of thing in general?
You'll also spot I have font-rendering (not my font though but I'll ship the license - free for personal and commercial use). The score calculation is currently just: distance + 10*kills. That probably won't do, better to promote right-ward travel and have the dinos be a hindrance to that so maybe it should be: 10*distance+kills. I'll have to think a bit more on that one.
One final thing to do before the game is bare-minimally complete and that's to handle game-over. After that I'll look at adding soundFX, music and better visuals.