Quando está lidando com desenho, a melhor maneira de fazer isso é sobrescrevendo o método paintComponent de um JPanel ou paint de um JFrame.
W
WillyKocher
bom se tua tela ficar “piscando” ao repintar os componentes,oque provavelmente vai acontecer ja que esta pintando tao rapido na mesma tela que ta sendo exibida, recomendo procurar sobre Double Buffering, mas pra começar como ele disse acima ai, tu pode sobreescrever o metodo paintComponent, e fazer tua pintura la dentro,porque ai tu so ta fazendo a logica da troca de imagens e movimento, quando tu chama repaint() e a mesma coisa que ta chamando nada.
ViniGodoy
Só complementando. No Java você implementa double buffering e page flipping através da classe BufferStrategy. Esse “piscar” da tela é também chamado de flickering.