Просто возьми и используй PointJS.
Зачем ты сам возишься со всеми этими мелочами?
Если системно - у тебя изначально подход не правильный. Цикл игры должен крутится непрерывно, а не запускать по нажатию. По нажатию должны только меняться векторы объекта, а в цикле игры ты должен измерять задержку между кадрами и пересчитывать смещение по вектору в зависимости от этой задержки.