アニメーション(それ自体は 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 がスタックの最大深度よりも大きい場合、明らかにスタック オーバーフローが発生します。
質問: このパターンは、アニメーションを無限回実行するケースに拡張できますか? または、無限ループのケースを実行するためのより正しい方法はありますか?