Comment puis-je passer l'argument avec requestAnimationFrame?

Dans le programme principal je choisir au hasard un objet que je voudrais animer, j'ai donc appeler la fonction avec l'objet comme argument. La première boucle est ok, X est finement réglé, mais au prochain tour, il devient indéfini.

quelque Chose comme ceci:

var anim = {
        mainFunc: function(x) {
            anim.update(x);
            anim.redraw(x);
            window.requestAnimationFrame(anim.mainFunc);
        },

        update: function(x) {

        },

        redraw: function(x) {

        }
};

var n=Math.floor(Math.random() * (ArrayOfAnimObject.length));
anim.mainFunc(ArrayOfAnimObject[n]);
16
demandé sur user2735841 2013-11-10 22:23:58

2 réponses

vous devez soit créer une référence ou envelopper l'appel de fonction dans une autre fonction comme ceci:

mainFunc: function(x) {
    anim.update(x);
    anim.redraw(x);
    window.requestAnimationFrame(function() {
        anim.mainFunc(x);
    });
}
35
répondu kalley 2018-04-18 06:59:10

Vous pouvez également utiliser .bind.

mainFunc: function(x) {
    anim.update(x);
    anim.redraw(x);
    window.requestAnimationFrame(anim.mainFunc.bind(anim,x));
}
14
répondu Archy Wilhes 魏何 2015-11-08 08:09:20