Como fazer uma animação em gameloop

Estava fazendo um projeto java swing e defini um gameloop com o metodo paintComponente(com atualização de 120 hz), criei uma classe de inimigos chamada Enimes que possui um metodo chamado draw que recebe os Graphics do paintComponent
Logo após isso coloquei um método para atualiza a animação através de um Timer com delay de 1 segundo para cada animação, todavia existe um problema: A animação leva um segundo apenas para iniciar, depois vai mais rápida que um segundo. Se alguem puder ajudar me sentiria grato.

 @Override // Esse método draw é de uma superclass q criei
    public void draw(Graphics g) {
        // startMovementTimer();
        g.drawImage(pegaImagem(), super.x, super.y, super.UNITY, super.UNITY, null);

      if (yPos <= 11) {
        for (int ys = 0; ys < 11; ys++) {
            Timer timer = new Timer(1000, (ActionListener) -> { // Ajuste o intervalo de tempo aqui (800 milissegundos)
                // Atualize a posição dos inimigos para uma posição diferente
                yPos++; // Incrementa a posição y para mover o inimigo para baixo
                setLocal(objeto[xPos][yPos].x, objeto[xPos][yPos].y);
            });
            timer.setRepeats(false);
            timer.setInitialDelay(ys * 10000); // Define um atraso inicial para cada timer
           timer.start();
        }
      } 

Porque você está criando 11 timers?

Eu não tenho os fundamentos de como fazer jogo, ai eu tive uma ideia de setar cada elemento conforme os indices de um array para definir sua localização na tela, por isso os 11 timers, para percorrer as 11 casas do array e assim prosseguir na tela

Então procura dar uma estudada nos fundamentos.

Você deveria ter uma única thread com um loop que repete estes passos:

  • Ler a entrada do usuário;
  • Atualizar o estado dos objetos;
  • Renderizar a cena;
2 curtidas

Eu fiz tudo isso, mas acho q o meu projeto foi mal desenhado, mais tarde quando tiver tempo vou fazer um novo esboço.

No código que você postou não tem isso.