Well, usually, timer based movement is done like this:
every start at the loop you do this:
Elapsed = timer() - Elapsed
Afterwards, you change any movement to:
movement = speed * Elapsed
which is for normal movement.
When you do something like a lock, I would do something like this:
(for the left arrowkey for example)
if leftkey() = 1
if leftTimer = 0
leftTimer = timer()
[increase position once]
else
if timer() - leftTimer > KeyLockTime
[increase position]
endif
endif
endif
ofcourse, you'll have to adjust it to your own program structure etc. But it's the main idea.
screen fps() has a delay, and sometimes it returns wrong values (or so it seems)
It's the programmer's life:
Have a problem, solve the problem, and have a new problem to solve.