2016-07-10 2 views
0

У меня проблема с моим кодом, в котором у меня есть цикл setinterval, который проверяет, является ли переменная menuScreen == true, если она делает, тогда она создает новый объект (или прототип), называемый gameMenu1, и снова устанавливает значение false ,javascript Только функция вызова класса только

Под этим в цикле понимается оператор try и catch, который пытается вызвать функцию gameMenu1.Draw();.

Когда я установил menuScreen в = true, он будет запускать эту функцию рисования один раз, а затем просто не запускать ее снова, и я понятия не имею, почему.

Javascript Код:

//defining the canvas elements (initial setup) 
var canvas = document.getElementById("canvas"); 
var ctx = canvas.getContext("2d"); 
var canvasWidth = canvas.width; 
var canvasHeight = canvas.height; 

//setting the menuScreen to true 
var menuScreen = true; 
var gameScreen = false; 


//gamemenu class 
var GameMenu = function() { 
    // inserting a texture from files 
    this.img = new Image(); 
    this.img.src = "Assets/textures/TitleScreen.png"; 
}; 

GameMenu.prototype.Draw = function() { 
    console.log('drawn to screen (menuscreen)') 
    ctx.drawImage(this.img,0,0,canvas.width,canvas.height); 
}; 

setInterval(function() { 
    ctx.clearRect(0,0,canvas.width,canvas.height); 
    ctx.strokeRect(0,0,canvasWidth,canvasHeight); 
    console.log(menuScreen) 
    if (menuScreen == true) { 
     var gameMenu1 = new GameMenu(); 
     menuScreen = false; 
    } 
    try { 
     gameMenu1.Draw(); 
    } 
    catch(err) { 

    } 

}, 30); 

Cavas Элемент:

<canvas id="canvas" width="600" height="600"></canvas>

+0

нет никакой связи Pastebin. Не хватает –

+0

Просьба указать адекватную часть кода –

+0

oops sorry, возможно, забыли добавить его. Здесь http://pastebin.com/gCcLuBbD @BirjuShah –

ответ

0

Вот это,

setInterval(function() { 
    ctx.clearRect(0,0,canvas.width,canvas.height); 
    ctx.strokeRect(0,0,canvasWidth,canvasHeight); 
    console.log(menuScreen) 
    var gameMenu1; 

    if (menuScreen == true) { 
     gameMenu1 = new GameMenu(); 
     menuScreen = false; 
    } 

    try { 
     gameMenu1.Draw(); 
    } catch(err) { 

    } 

}, 30); 
+0

спасибо, но почему это работает? как почему вы не можете определить переменную из инструкции if –

+0

, вы можете определить ее внутри if, но он неизвестен вне оператора if. его базовый. :) – maleeb

+0

, но код отправлен как ответ и что в вопросе точно такие же для интерпретатора javascript. Даже если вы напишете переменную внутри «if», она все равно будет поднимать ее вверх. @maleeb –

0

код не будет работать снова, потому что вы установили menuscreen ложь.

В следующий раз, когда интервал будет работать, он не пойдет в условии if, чтобы определить gameMenu1, и поэтому у него не будет доступа к нему.

Он также не даст ошибку, потому что он находится в блоке try. основном gameMenu1 является undefined

интервала Javascript имеет функцию обратного вызова в качестве параметра и каждый раз, когда функция со свежей socpe передается на него. Он не сохраняет область действия предыдущей функции.

Подробнее here

Также проверьте polyfill из setInterval here, чтобы понять, как setinterval реализуется.

Смежные вопросы