我對編程相對陌生,並且正在使用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();
}
});
同樣在格式化/通用邏輯/編程禮儀任何提示,這樣的事情,會非常有幫助。
我試圖運行你的代碼(你說你發佈了整個程序),但我沒有看到任何東西。您提到問題發生在關卡末尾,但我根本無法做任何事情。恐怕我不完全明白你想要做什麼。然而,我懷疑你需要先理解JavaScript中的異步編碼,然後才能解決這個問題(https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop)。 – Trevor