The bug report said Apex Moto “is smooth, but it lags and stops for a long time.” That's the hardest kind of performance bug. The game ran at full speed most of the time, then froze, briefly but noticeably, at random points in the race. In a motorbike game that is the worst place to freeze.

Apex Moto is the racing headline of Game Collection: a night-city race against up to seven riders. This is how we found the stalls and removed them. The short version is that every fix came down to doing less work on each frame.

Measure first

We didn't guess. We added a temporary logger to the race that recorded two things and sent them to a small local server while we played:

  • Stalls in the game logic: a timer that should fire every 50 ms, which shows how late it really fires. Lateness means the game was too busy to get to it.
  • Frame gaps: the time between frames actually drawn on the screen.

The data showed that the "long stops" were stalls of 140 to 390 ms during a race. A stall that long is plainly visible. Three separate causes came out of the logs.

Three causes and three fixes: 120 Hz screens doubled the work, the speedometer redrew too much, and sounds were built mid-race

Cause 1: 120 Hz screens did twice the work

The race physics ran once per frame. On a 60 Hz screen that is 60 steps a second. On a 120 Hz iPhone it is 120, so the newest, fastest phones did twice the work for no visible gain.

The fix: the physics step is now capped at 60 times a second. Each frame adds its elapsed time to a running total. The physics only advances once at least about 10 ms have built up, and it moves by that real elapsed time, with a ceiling of 50 ms. Movement stays correct at any refresh rate, and a 120 Hz screen no longer doubles the cost.

Cause 2: the speedometer redrew too much of the screen

The speed, gear and race time change constantly. Every one of those changes made the game rebuild a large part of the race screen, and on a busy screen that is a lot of work just to show one new number. Those rebuilds were the big stalls.

The fix: three changes.

  • The fast-changing numbers (speed, gear and time) are now written straight to the display, without rebuilding anything around them.
  • Everything else on the HUD (position, lap, nitro) updates four times a second, which is plenty for numbers the eye reads.
  • The steering controls, the rival riders and the screen flashes are now separate pieces, so each one updates without dragging the whole screen along.

Cause 3: race sounds were built the first time they played

Several race effects are generated by the game instead of loaded from files. Each one was built the first time it was needed. Too often, that was mid-race: the first nitro boost or the first overtake.

The fix: every race sound is prepared in advance, while you are still in the garage choosing your bike, so the race itself never waits for one. We also stopped resending the engine loop's pitch and volume when they had barely changed. Tiny adjustments below what you can hear are now skipped.

The result

With all three fixes in, our logger showed no stalls during a race in testing. We shipped the fixes as an over-the-air update. Testing was done on the iOS simulator, so we're watching feedback from real phones, Android included, before we call it finished.

The general lesson: do less on every frame. Don’t rebuild the screen to change one number, run the simulation at a fixed rate instead of the screen’s rate, and never create an asset in the middle of play.
SymptomCauseFix
Extra load on new iPhonesPhysics ran 120 times a secondStep capped at 60 a second, using real elapsed time
Long freezes mid-raceSpeedometer updates rebuilt the screenNumbers written directly, HUD 4 times a second, separate pieces
Hitch on first boost or overtakeSound built on first usePrepared in the garage; tiny loop changes skipped

Keep reading: How we rebuilt Cricket for a phone · Inside Lacspace Game Studio · 106 offline games with no ads · How the app picks your next game

Game Collection is made by Lacspace Game Studio. This article describes the app as of 3 November 2026; games and features change with updates. Game Collection is free, with no ads and no in-app purchases.

Frequently asked questions

Why do some mobile games stutter on 120 Hz iPhones?

If a game runs its simulation once per frame, a 120 Hz screen doubles the work compared with 60 Hz. Running physics at a fixed rate, using real elapsed time, keeps the cost the same on any screen.

How do you stop a busy game screen from stalling?

Do less on every frame. Write values that change constantly, such as speed or a timer, straight to the display, update slower HUD values a few times a second, and keep busy parts of the screen separate so they update on their own.

What is Apex Moto?

Apex Moto is a free motorbike racing game in Game Collection, raced at night against up to seven riders, with steering buttons, tilt and nitro. It has no ads and plays offline.

How did you measure the stutter?

With a temporary in-game logger that recorded how late a 50 ms timer fired, which reveals stalls, and the gaps between frames drawn on the screen, sent to a local server during real races.

Did the fix require an app update from the store?

No. It shipped as an over-the-air update, so players received it the next time they opened the app.