2015-12-19 1 views
-2

J'essaie d'exécuter du code sans cesse. Je veux utiliser la méthode setInterval() pour cela. Le problème que j'ai avec mon programme est qu'il n'est pas exécuté du tout. J'ai essayé de trouver l'erreur en utilisant la console du navigateur, mais il ne dit aucune erreur. J'ai vérifié toutes les méthodes qui sont appelées avant que setInterval() soit correctement exécuté. Voici le code de base: -setInterval() ne se déclenche pas

"use strict"; 
var Main = { 
    //properties 

    initialize: 
     setInterval(this.gameLoop, 15); 
    }, 

    gameLoop: function(){ 

    } 

    //other methods 
} 

window.addEventListener("load", Main.initialize, false); 
+2

Avez-vous l'appel de cette fonction.gameLoop à tous? –

+0

@ c-smile non pas du tout. this.gameLoop n'est pas exécuté une seule fois. – arandomguy

+0

Et qu'est-ce que this.gameLoop? Est-ce une fonction? –

Répondre

1

Le problème est que this fait référence à l'objet window au lieu de l'objet principal. Voir cette Fiddle

Solution 1

Modifier le setInterval à:

setInterval(Main.gameLoop, 15); 

Solution 2

Modifier l'événement load à:

window.addEventListener("load", function() { Main.initialise.call(Main); }, false); 

objet Way

function Main() { 
    // The constructor 
} 

Main.prototype.initialise = function() { 
    setInterval(function() { 
     this.gameLoop(); 
    }, 15); 
} 

Main.prototype.gameLoop = function() { 
    // Do gameloop stuff 
} 

var main = new Main(); 
window.addEventListener("load", function() { 
    main.initialise(); 
}, false); 

S'il vous plaît noter, j'utilise initiali de e au lieu de initiali z e parce que sa façon dont je l'orthographie (Juste au cas où vous copier coller directement et se demander pourquoi cela ne fonctionne pas pour certains bits)

+0

pourquoi le mot clé 'this' fait référence à l'objet 'window' au lieu de l'objet 'Main'? Ne devrait-il pas se rapporter au propriétaire de la méthode que j'exécute? – arandomguy

+0

'this' fait référence à tout ce qui appelle la fonction. Par défaut, lorsque vous invoquez une méthode sur une instance, elle passe par le contexte actuel (IE: 'window' car c'était le dernier contexte) – JosephGarrone

+0

Votre variable' Main' est en fait un tableau associatif avec une fonction comme l'un des valeurs. Je vais éditer ma réponse pour montrer comment on le ferait typiquement en utilisant un "objet". – JosephGarrone