Olá.
Você deve usar uma thread para desenhar continuamente o seu label. Essa será a main thread do jogo.
Na verdade, ao invés de usar label, você sobrescreve o método paintComponent do painel principal do seu jogo e pinta tudo (imagens, fundo, etc) diretamente, sem usar os componentes do Swing.
A primeira dica que te dou é ler o livro Killer Game Programming in Java, que está completo no site do autor. Lá essa sua dúvida será resolvida.
A thread que desenha continuamente o jogo é chamada de MainLoop. Existem duas principais técnicas para implementar o main loop. A primeira é manter a taxa de frames por segundo e updates por segundo no máximo possível. E isso pode variar a cada iteração do loop. Ou seja, para desenhar as coisas corretamente, você deverá saber quanto tempo transcorreu entre uma execução do loop e a outra.
A segunda técnica, que descrevo nesse artigo é baseada na implementação do Killer. Consiste em deixar a taxa de updates por segundo constante, enquanto a taxa de frames por segundo fica maximizada. Assim, não é necessário saber quanto tempo transcorreu entre uma iteração e outra. Embora o algoritmo do loop em si seja um pouco mais complexo, o jogo todo fica mais simples.
A uns tempos atrás deixei aqui no GUJ um jogo que eu fiz, simples, com os códigos fontes e tudo mais. O jogo está cheio de comentários e já contém uma framework simples que implementei que te auxilia a mexer com recursos de som e imagem. O jogo chama-se Vikanoid e é uma implementação de um jogo muito conhecido, chamado Arkanoid.