As far as I understand it, this happens because of how Corona handles dynamic content scaling. Under certain circumstances it’s possible that the output is actually a decimal width/height, and of course a screen can’t colour half of a pixel in, so has to either round up or down. Unfortunately if the rounding is down you’re left with the possibility that the x/y of the next image is actually 1px further away than the right/bottom edge of that tile.
Because your gaps aren’t consistent, i.e. you’re not seeing a gap after every single row, my guess is that your anchor points are central (default) or at least, not top left. The mid point of a not quite perfectly sized image is again a decimal and is therefore going to round when output to screen. You’ll find that if you scroll around really, really slowly these gaps shift to different rows because of these rounds.
My advice would be to play around with math.floor and math.ceil when positioning your tiles, and/or use anchor points of 0,0. Or try scaling your images up by a tiny, tiny amount just to force those rounds to create a 1px overlap instead of a 1px gap. What actually works for you is subject to your code really.
Additionally, you might find that this helps at the cost of losing the anti-aliasing of resized images:
display.setDefault("magTextureFilter", "nearest") display.setDefault("minTextureFilter", "nearest")