Вместо repaintPanel добавьте
colors.forEach(e=>{
let img = new Image();
img.src= e.img;
img.onload = function(){
e.isLoaded = true;
if(colors.every(e1=>e1.isLoaded))
repaintPanel();
}
});
P.S. А вообще реализация через setInterval просто ужас, сделайте один игровой цикл и используйте requestAnimationFrame или setTimeout на худой конец
Первое
что попалось, ознакомтесь если понятия не имеете что это такое