Я думаю, проблема в том, что вы очищаете тайм-аут до , вы устанавливаете его в следующий раз.MoveDown
сбрасывает время ожидания, но как только управление переключается обратно в Animate, вы устанавливаете его снова.
Попробуйте что-то вроде этого:
var Animate = function(){
Clear();
if (MoveDown())
gLoop = setTimeout(Animate,40);
}
var MoveDown = function(){
// animation code
if(velocity==0){
AnotherAction(); //Here is not working
return false;
}
return true;
}