2017-04-21 108 views
0

我對編程相對陌生,並且正在使用Code.org進行教學。我相信代碼是JavaScript,但我不太確定。我所做的程序是一個簡單的連接點程序,我現在試圖實現的層次。但是,一旦我處於關卡的末尾,所有的變量都被重置並且屏幕被更改,我就無法點擊這些點。回到事件監聽器? (Code.org - Javascript)

這是由於這部分代碼運行後的事實:

//Finish the level, change the level 
 
    if(clickedX.length >= (level*2+4) - 1 && clickedY.length >= (level*2+4) - 1){ 
 
    for(var i = 1; i < level*2+4; i++){ 
 
     deleteElement(i + "Text"); 
 
    } 
 
    clearCanvas("mainCanvas" + level); 
 
    level++; 
 
    setScreen("level" + level); 
 
    setActiveCanvas("mainCanvas" + level); 
 
    dotsX = []; 
 
    dotsY = []; 
 
    levelSector = [10]; 
 
    levelDiv = 300/(level*2+4); 
 
    clickedX = []; 
 
    clickedY = []; 
 
    createDotCoords(); 
 
    }

它不回返回到它最初是如何到達那裏是click事件偵聽器。這是整個計劃,不是很長。我已經用我自己的頭腦解決了問題,並發現我現在陷入困境。任何幫助是極大的讚賞。謝謝。

var dotsX = []; 
 
var dotsY = []; 
 
var level = 1; 
 
var clickedX = []; 
 
var clickedY = []; 
 
var levelSector = [10]; 
 
var levelDiv = (300/(level*2+4)); 
 
setActiveCanvas("mainCanvas" + level); 
 

 
createDotCoords(); 
 

 
//Searches an array for a specific number 
 
//Adds and subtracts 4 to allow for the entire circle to be clicked 
 
function searchVar(variable,needle) { 
 
    for(var i = 0; i < variable.length; i++){ 
 
     if(variable[i] === needle){ 
 
     return true; 
 
     } 
 
    else{ 
 
     for(var x = 1; x < 4; x++){ 
 
     if(variable[i] + x === needle){ 
 
      return true; 
 
     } 
 
     if(variable[i] - x === needle){ 
 
      return true; 
 
     } 
 
     } 
 
     } 
 
    } 
 
} 
 

 
//Create Dot Coordinates and Draw 
 
function createDotCoords(){ 
 
    levelDiv = Math.round(levelDiv); 
 

 
    for(var i = 1; i < level*2+4; i++){ 
 
    appendItem(levelSector,levelDiv * i); 
 
    
 
    appendItem(dotsX,randomNumber(levelSector[i - 1],levelSector[i])); 
 
    appendItem(dotsY,randomNumber(40,410)); 
 
    
 
    circle(dotsX[i - 1],dotsY[i - 1],4); 
 
    textLabel(i + "Text", i); 
 
    setPosition(i + "Text",dotsX[i - 1],dotsY[i - 1],3,4); 
 
    } 
 
} 
 

 

 
//Get mouse click location and check if the location is the same 
 
//as the dot location. Create a line between that one and the 
 
//previous dot if clicked already 
 
onEvent("mainCanvas" + level, "click", function(event){ 
 
var clickX = event.offsetX; 
 
var clickY = event.offsetY; 
 
var booX = false; 
 
var booY = false; 
 
console.log("X " + clickX + " Y " + clickY); 
 
if (searchVar(dotsX,clickX)){ 
 
     booX = true; 
 
     console.log("x is true"); 
 

 
     } 
 
if (searchVar(dotsY,clickY)){ 
 
     booY = true; 
 
     console.log("y is true"); 
 

 
     } 
 
     
 
if(booY && booX){ 
 
    if(clickedY.length === 0){ 
 
    appendItem(clickedY,clickY); 
 
    } 
 
    if(clickedY.length >= 1){ 
 
     if(searchVar(clickedY,clickY)){ 
 
      console.log("already in Y"); 
 
     } 
 
     else{ 
 
      appendItem(clickedY,clickY); 
 
     } 
 
    } 
 
     
 
    if(clickedX.length === 0){ 
 
     appendItem(clickedX,clickX); 
 
    } 
 
    if(clickedX.length >= 1){ 
 
     if(searchVar(clickedX,clickX)){ 
 
     console.log("already in X"); 
 
     } 
 
     else{ 
 
     appendItem(clickedX,clickX); 
 
     } 
 
     } 
 
     
 
     
 
    if(clickedX.length === 1 && clickedY.length === 1){ 
 
    console.log("only one dot clicked"); 
 
    setStrokeColor("green"); 
 
    circle(dotsX[0],dotsY[0],4); 
 
    setStrokeColor("black"); 
 
    } 
 
    else{ 
 
    setStrokeColor("green"); 
 
    circle(dotsX[clickedX.length - 1], dotsY[clickedY.length - 1], 4); 
 
    setStrokeColor("black"); 
 
    line(dotsX[clickedX.length - 2], dotsY[clickedY.length - 2], dotsX[clickedX.length - 1], dotsY[clickedY.length - 1]); 
 
    } 
 
    } 
 
//Finish the level, change the level 
 
    if(clickedX.length >= (level*2+4) - 1 && clickedY.length >= (level*2+4) - 1){ 
 
    for(var i = 1; i < level*2+4; i++){ 
 
     deleteElement(i + "Text"); 
 
    } 
 
    clearCanvas("mainCanvas" + level); 
 
    level++; 
 
    setScreen("level" + level); 
 
    setActiveCanvas("mainCanvas" + level); 
 
    dotsX = []; 
 
    dotsY = []; 
 
    levelSector = [10]; 
 
    levelDiv = 300/(level*2+4); 
 
    clickedX = []; 
 
    clickedY = []; 
 
    createDotCoords(); 
 
    } 
 
});

同樣在格式化/通用邏輯/編程禮儀任何提示,這樣的事情,會非常有幫助。

+0

我試圖運行你的代碼(你說你發佈了整個程序),但我沒有看到任何東西。您提到問題發生在關卡末尾,但我根本無法做任何事情。恐怕我不完全明白你想要做什麼。然而,我懷疑你需要先理解JavaScript中的異步編碼,然後才能解決這個問題(https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop)。 – Trevor

回答

0

我的猜測是,以某種方式在重置變量和畫布時會出現點擊監聽器的方式,或者顯示的是響應。你能在這裏發佈項目的分享鏈接嗎?我可以看看代碼。 (我每天都在App Lab工作,所以我可以幫忙看看代碼,或者看看它是否是一個實際的bug)。

+0

歡迎來到SO!很高興在這裏見到你!我回顧第一個答案,你的回答應該是一個評論 - 因爲答案更多的是解決問題的辦法,而不是告訴你的工作:)。你可以在這個問題下評論,看看吧! – Felix