首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回到事件侦听器?(Code.org - Javascript)

返回到事件侦听器?(Code.org - Javascript)
EN

Stack Overflow用户
提问于 2017-04-22 03:10:47
回答 1查看 71关注 0票数 0

我是一个编程新手,正在使用Code.org学习编程。我相信代码是javascript,尽管我不太确定。我做的这个程序是一个简单的连接dots程序,我现在正在尝试实现的水平。然而,一旦我在一个关卡的末尾,所有的变量都被重置,屏幕被改变,我就不能点击这些点。

这是因为在这段代码运行之后:

代码语言: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();
    }

它不会返回到最初是如何到达那里的,即单击事件侦听器。这是整个程序,一点也不长。我已经在自己的脑海中耗尽了所有的解决方案,并发现我现在被卡住了。任何帮助都是非常感谢的。谢谢。

代码语言:javascript
复制
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();
    }
});

此外,任何关于格式化/一般逻辑/编程规范的技巧,诸如此类的东西,也会非常有帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-04-25 05:52:15

我的猜测是,不知何故,在您重置变量和画布的过程中,有一些东西阻碍了单击侦听器,或者在响应中显示了什么。你能在这里发布这个项目的分享链接吗?我可以看一下代码。(我每天都在App Lab工作。因此,我可以帮助编写代码,或者找出它是否是真正的bug)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43550297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档