Ah, sim, como você está fazendo a movimentação no seu programa?
Você chega a calcular quanto tempo se passou entre um ciclo e outro do timer, para então multiplicar esse valor pelo velocidade?
Pq, deslocamento, pela física é dado por:
deslocamento = velocidade * tempo;
O tempo é obtido subtraindo o System.currentTimeMillis() desse loop e do anterior. Com isso vc também pode obter a famosa taxa de frames por segundo.
Logo, se vc quiser deslocar um ponto a 10 pixels/segundo, você deveria ter uma velocidade de 0.001 pixel/ms. Então, essa velocidade seria multiplicada pela quantidade de milis entre uma chamada de timer e outro (essa quantidade pode variar), e o deslocamento final seria constante. Um erro comum de quem está começando em CG é confiar demais no timer, e achar que a velocidade será constante.
Bem, não será. Nem o timer é constante e nem a medição dos millis é precisa. Há mais explicações sobre isso no link do Killer Game Proggraming in Java, que te passei ali em cima.
Esse também é o segredo para que sua aplicação rode igual em qualquer máquina. Máquinas mais rápidas terão um intervalo de tempo menor, enquanto máquinas mais lentas um maior. Como o intervalo é multiplicado pela velocidade, no final das contas, o deslocamento de um pixel na tela acabou sendo o mesmo. Como nos jogos, quem tiver uma máquina mais lenta vai ver tudo mais “saltado”, equando o sujeito de máquina mais rápida vai ver um movimento gradual e suave.
Leia o livro do Killer que ele explica isso direitinho, compara as várias abordagens e dá uma sugestão realmente efetiva de como manter uma taxa de updates constante.