Oi Benildo, tudo bom?
Para usarmos posições pré-definidas na geração de obstáculos vc precisa ter elas configuradas em alguma variável dentro do escopo da sua classe. Nesse caso eu usaria uma Queue
para armazenar esses dados. Assim vc vc tem certeza que uma vez que o valor for usado ele não será repetido. Já que o método dequeue
retira o valor da fila.
Pelo que eu vi vc está está fazendo isso dentro do array fase1 . Porém vc está iterando no array inteiro e chamando o Translate
para um obstáculo. Imagino que no seu caso vc até está conseguindo mover os obstaculos, mas acaba que todos ficam na mesma posição final, correto?
Se for isso, o seu erro é de lógica. O que vc precisa fazer é colocar cada valor dentro do seu array fase1 para um único obstáculo e o próximo valor do array para o próximo obstáculo. Como vc quer um controle mais fino entre todos os obstáculos, essa lógica tem que estar no gerador de obstáculos e não no obstáculo em si.
Ai no momento em que vc gera um novo obstáculo, vc vê qual é a a próxima posição no array fase1 ( A Fila aqui ajuda bastante pq vc não precisa ficar controlando o índice do array) e chama um o tranlate
naquele obstáculo q foi criado.