動いた後に、誤差のない値をいれりゃいいんじゃないの?
キーが入った時点で移動先を計算しておけば良いだけだし。
16ドットを10フレームで移動するなら、
move(){
cnt++;
pos+=(16.0/10)
if(cnt==10)pos=newpos;
}
みたいな。
昔そんな風に作ったけど、だめ?