Aham, en cualquier caso, personalmente no me gusta la solucion que has adoptado. El problema que tiene es que tienes un sistema muy inestable, dependes demasiado de que "todo vaya bien". Si luego añades alguna modificación al juego, existen muchas posibilidades de que resurja este bug. Porque el bug no lo has arreglado, solo has evitado que se produzca.
Dicho de otro modo, el bug no era que se crearan dos enemigos en el mismo sitio. El bug es, que dos enemigos superpuestos se quedan bloqueados. La solución correcta de afrontar el problema sería modificando la lógica de movimiento de los enemigos para que eso no pueda ocurrir. Una primera aproximacion sería guardar en una variable booleana que se ha producido una colision (con cambio de direccion incluido), si en el siguiente frame, sigue habiendo colisión, como dicha variable estaría a 1, pues ignoras la colision y no cambias la dirección. Finalmente, cuando tengas un frame en el que no hay colisión, pones esa variable a 0, para preparar el enemigo para futuros choques.
Esto de todos modos sigue siendo imperfecto, aun estaría el problema de 2 enemigos superpuestos que se mueven en la misma dirección (seguirian siempre superpuestos), y que ademas no tiene en cuenta con quien colisionastes la vez anterior, por lo que mientras siga superpuesto con el mismo enemigo, ignorara colisiones con todos los demas enemigos. Una pequeña modificacion sería en vez de guardar un booleano, guardar el id del enemigo con el que colisiono el frame anterior, y mientras la primera llamada a collision() retorne el mismo id, se ignora la colisión.
Por ultimo, para el caso de los enemigos superpuestos con la misma direccion, la solución esta en a parte de todo lo anterior, comprobar si el enemigo con el que colisionas lleva la misma direccion que tu, y en caso afirmativo, asignar un nueva direccion al azar.
Espero que sirva de ayuda
