Я согласен почти со всем, что сказал Билл, особенно с тем, что Swing загадочен (хотя на самом деле не так сильно, как другие графические среды).
Чтобы дать несколько ссылок, 30 кадров в секунду (это то, что производит большинство чересстрочных экранов) составляет 1 кадр каждые 33 мс. 60 кадров в секунду - это самый высокий показатель, который могут воспринимать люди (1 кадр / 16 мс), и большинство ЖК-мониторов обновляются с частотой 60 или 75 Гц, что будет абсолютным быстродействием, которое вы на самом деле можете произвести. 20 мс / кадр - это частота кадров 50 кадров в секунду, которая также совпадает с электрической частотой на европейских территориях и просто заметна человеческому глазу.
Главное, против чего я бы порекомендовал, это просто делать все в тесном цикле. Это заставит вашу скорость игры сильно зависеть от системы, в которой вы играете. В более быстрой системе вы можете получить извергание кадра быстрее, чем игрок может отреагировать, даже если он играет разумно на старшей (или у вас будет проблема обратного хода на дряхлой машине). Использование таймера позволит вам быть более последовательным в скорости, но вы должны сделать некоторые защитные проверки в случае, если вы пропустите крайний срок. Это означает, что ваш таймер должен знать, когда вычисления завершены, поэтому, если пройдет другой кадр и он еще не закончился, то он пропустит следующий кадр. Более того, вы регистрируете, сколько времени фактически проходит между вычислениями, и соответственно корректируете фактическое перемещение ваших персонажей.
Еще одно предупреждение: в то время как рисование должно выполняться в потоке AWT, а расчеты по нему (чтобы ваша программа реагировала), состояние также должно обновляться в потоке AWT. Если вы позволите потоку, выполняющему вычисления, обновить состояние игры, то поток AWT увидит это в середине перерисовки, что приведет к эффекту, называемому разрывом. Таким образом, вам может потребоваться сделать копию состояния для публикации в ветке AWT. Для этого и предназначен SwingWorker, который вы, вероятно, будете использовать вместе с таймером.
Удивительно, но большая часть того, что я сказал, на самом деле нова по сравнению с тем, что я написал на ваш другой вопрос.