Well if you're talking about timers as some kind of callback, then no, but timer based movement is always a good way of implementing things anyway as you can't predict exactly how fast the main loop will run.
AGK has the Timer() function which will return a floating point value of the number of seconds the machine has been running, and so you can use this to work out timings. However you cannot use this method to run
faster than the main loop, because the code would have to be placed in the main loop. Mind if I ask why you can't move more than 1px at a time?
Anyhow the code for timer based movement would be something like:
lastGhostStep# = Timer()
lastPacManStep# = Timer()
do
time# = Timer()
if time# - lastGhostStep# >= ghostStepSpeed#
// move the ghost
lastGhostStep# = time#
endif
if time# - lastPacManStep# >= pacManStepSpeed#
// move the pac man
lastPacManStep# = time#
endif
Sync()
loop
Note that that code is untested. Hope that helps.