2013-10-31 9 views
6

Mam łańcuch obiektów, które wygląda tak:requestAnimationFrame zakres zmian do okna

Game.world.update() 

chciałbym używać requestAnimationFrame określić framerate tej funkcji.

Jednak kiedy wdrożyć go tak:

World.prototype.update = function() 
{ 
    requestAnimationFrame(this.update); 
} 

The zmian zakresu od obiektu do obiektu światowego okiennej. Jak zachować zakres, który chcę, podczas wywoływania requestAnimationFrame()? Wiem, że ma to coś wspólnego z anonimowymi funkcjami i takimi, ale nie mogę tego zrozumieć. .

Odpowiedz

11

Usual podejście, pracuje wszędzie:

World.prototype.update = function() 
{ 
    var self = this; 
    requestAnimationFrame(function(){self.update()}); 
} 

lub przy ES5 Function.prototype.bind (compatibility):

World.prototype.update = function() 
{ 
    requestAnimationFrame(this.update.bind(this)}); 
} 
0

Innym sposobem na osiągnięcie tego jest użycie wyrażenia lambda tak:

requestAnimationFrame((time) => { loop(time) });

To również utrzymuje zakres, ale to nieco czystsze.

Powiązane problemy