我有以下模式来重复动画(本身由 x 帧组成), t 次:
sprite.prototype.loop = function(t,animation_name,frame_delay) {
if(t > 0) {
function next_run() {
this.loop(t-1,animation_name,frame_delay);
}
this.run(animation_name,frame_delay,next_run);
}
};
sprite.prototype.run = function(animation_name,frame_delay,frame_count,callback) {
frame_count ||= 0;
var s = this;
if(frame_count < this.paths[animation_name].length) { // x frames
setTimeout( function () {
s.blit(s.paths[animation_name][frame_count]);
s.run(animation_name,frame_delay,frame_count+1);
}, frame_delay );
}
} else {
if(!!callback) callback();
}
super_mario.loop(10000,'mushroom_death',40);
显然,如果 x*t 大于最大堆栈深度,就会发生堆栈溢出。
问题:这种模式可以扩展到无限次运行动画的情况,还是有更正确的方法来做无限循环的情况?