Hola:
Lo malo de ese código es que no indica cuando las imágenes se han cargado. La precarga no está mal, y se supone que al necesitar cualquiera de las imágenes del array, estas estén disponibles en memoria.
Las posibilidades son consultar el atributo complete cada cierto tiempo (setTimeout) o asignarle una función de chequeo a las imágenes... al evento load de esas imágenes:
function precarga() {
imagen = new Image();
imagen.src = "imagen.gif";
imagen.onload = alert("imagen cargada");
}
precarga();
Saludos