Partage
  • Partager sur Facebook
  • Partager sur Twitter

RequestAnimation

prototype, this

    10 juillet 2011 à 23:53:56

    Je viens quêter un peu d'aide, dans le cadre d'un petit jeu via Canvas, j'utilisais la (dépassé) fonction setInterval.
    M'étant rappeller les propos de xavierm02 sur requestAnimFrame, j'ai voulus à mon tour l'utiliser.
    window.requestAnimFrame = (function() {
      return window.requestAnimationFrame ||
    	 window.webkitRequestAnimationFrame ||
    	 window.mozRequestAnimationFrame ||
    	 window.oRequestAnimationFrame ||
    	 window.msRequestAnimationFrame ||
    	 function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    	   window.setTimeout(callback, 1000/60);
    	 };
    })();
    
    Au cas ou :-° .


    Le résumé simple de ma situation, je me trouve dans un prototype de mon objet Game.
    Game.prototype.refresh = function(){
            this.ctx.clearRect(0, this.cWidth, 0, this.cHeight);
    	this.image();
    	this.anim();
            
    	requestAnimFrame( this.refresh );
    };
    

    Bien évidement cela ne fonctionne pas, requestAnimFrame étant séparé de l'objet, this ne correspond plus à rien.
    Si je fais un alert(this), j'obtiens dans un premier temps bel et bien mon objet, mais une fois dans requestAnimFrame il n'est plus qu'une fonction anonyme.

    Viens enfin une bonne petite liste de questions / interrogations.
    • Tout d'abord le "comment je peux bien faire ?".
    • J'ai lus ensuite dans divers endroit le terme Wrapper (qui lui correspond), mais j'arrive pas à bien comprendre ce que cela signifie.
    • De même la fonction elle même de requestAnimFrame me parait pas mal obscure, je n'arrive pas à comprendre son réel fonctionnement.
    • Pour terminer, une questions légèrement dérivé, comme j'ai vu un affichage de Fps, comment le gérer à travers requestAnimFrame ?

    Voilà tout, merci d'avance pour le temps accorder, en espérant avoir des réponses (au moins sur la principal hé hé) :) .
    • Partager sur Facebook
    • Partager sur Twitter
      11 juillet 2011 à 7:42:39

      Game.prototype.refresh = function(){
      	var that = this;
      	this.ctx.clearRect(0, this.cWidth, 0, this.cHeight);
      	this.image();
      	this.anim();
      	
      	requestAnimFrame(function() { that.refresh(); });
      };
      
      • Partager sur Facebook
      • Partager sur Twitter
        11 juillet 2011 à 10:31:17

        J'ai déjà testé Golmote, cela ne fonctionne pas.
        Le problème reste le même.

        Ps: le "var that = this;" c'est toi qui me l'a appris, et je l'utilise sacrément, je ne serais pas venu sans tester ;) .
        • Partager sur Facebook
        • Partager sur Twitter
          11 juillet 2011 à 20:51:24

          Dans une fonction anonyme, le that.machin, hein ?

          Je vois pas pourquoi ça fonctionnerait pas...
          • Partager sur Facebook
          • Partager sur Twitter
            11 juillet 2011 à 22:46:31

            ... bon bah désolé, j'étais SUR de l'avoir testé.
            Je test par cas de conscience à nouveau, et ça marche...

            Sinon il y a moyen d'avoir une réponse concise sur le fonctionnement (ou aux autres questions plus générales) ?
            Car dans mon cas il fait 60 fps au début, et lors du dézoom il tombe vers 30 fps (et reste fixe sur celui-ci).
            • Partager sur Facebook
            • Partager sur Twitter
              11 juillet 2011 à 23:23:54

              Bah dès que le navigateur fait un reflow, il te dit "hey, t'as des trucs à afficher ?", tu tu lui a demandé (request) une animationFrame, il fait ce qui se trouve dedans avant d'afficher.
              • Partager sur Facebook
              • Partager sur Twitter

              RequestAnimation

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown