Почему JS медленно меняет img.src?
Рекомендую поразбираться с такой штукой как спрайты. Это одна большая картинка на которой отображены сразу все элементы в разных их состояниях. Браузер грузит только её, а не кучу картинок. Если вам нужно отобразить какой то элемент, вы просто смещаете картинку в нужном направление относительно области, где вы хотите отобразить этот элемент. В общем в различных анимированных менюшках на сайте, спрайты помогают избавится от лага.
Не знаю, понятно ли объяснил...
Скорее всего лаг связан с тем, что браузер загружает картинку, после смены src, он ведь ничего о ней не знает, до появления пути к картинке. Выше верный выход подсказали со спрайтом.
Ну и посмотрите в сторону canvas. Всё же использовать дом для игр ресурсоёмко.