2016-11-11 98 views
0

我最近開始使用ProcessingJS庫編寫JavaScript代碼。我完成了可汗學院進入JS課程。我有一個函數,當x和y在選定的區域。它應該停止循環,移動x和y,並將score1X和score1Y移動到0,然後開始循環。得分1X和得分1Y沒有移動。該函數在draw =函數中調用。非常感謝!在Javascript中未更改的變量

var CreatePoint = function(score1X, score1Y) { 
    if (x >= score1X - 10 && x <= score1X + 10 && y >= score1Y - 10 && y <= score1Y + 10){ 
     noLoop();  
     points ++; 
     x -= 10; 
     y -= 10; 
     score1X = 0; 
     score1Y = 0; 
     loop(); 
    } 
    else if (points <= 0) { 
     ellipse(score1X, score1Y, 20, 20); 
    } 
}; 

draw = function() {  
    fill(255, 255, 255); 
    text(points + "/5", 20, 20); 
    CreatePoint(score1X, score1Y); 
    CreatePoint(score2X, score2Y); 
    CreatePoint(score3X, score3Y); 
    CreatePoint(score4X, score4Y); 
    CreatePoint(score5X, score5Y); 
}; 
+0

你可以發佈你的循環()函數嗎? –

+0

好吧,我將它添加到主帖子中。 –

+0

你的'draw()'函數在那裏,但是'loop()'在哪裏? –

回答

0

您不能通過分配函數參數變量來影響調用者的變量,因爲JavaScript參數是通過引用傳遞的。您需要返回調用者可以分配給變量的新值。

var CreatePoint = function(score1X, score1Y) { 
    if (x >= score1X - 10 && x <= score1X + 10 && y >= score1Y - 10 && y <= score1Y + 10){ 
     noLoop();  
     points ++; 
     x -= 10; 
     y -= 10; 
     score1X = 0; 
     score1Y = 0; 
     loop(); 
    } 
    else if (points <= 0) { 
     ellipse(score1X, score1Y, 20, 20); 
    } 
    return [score1X, score1Y]; 
}; 

draw = function() {  
    fill(255, 255, 255); 
    text(points + "/5", 20, 20); 
    var res = CreatePoint(score1X, score1Y); 
    score1X = res[0]; 
    score1Y = res[1]; 
    res = CreatePoint(score2X, score2Y); 
    score2X = res[0]; 
    score2Y = res[1]; 
    res = CreatePoint(score3X, score3Y); 
    score3X = res[0]; 
    score3Y = res[1]; 
    res = CreatePoint(score4X, score4Y); 
    score4X = res[0]; 
    score4Y = res[1]; 
    res = CreatePoint(score5X, score5Y); 
    score5X = res[0]; 
    score5Y = res[1]; 
}; 
+0

謝謝你的回答,但整個循環停止工作。我使用了println();函數來查看問題出在哪裏。它說,得分1X,得分1Y等是不確定的。我忘了說在節目開始時他們宣稱他們是隨機的(25,375)。這是問題嗎? –

+0

我不知道爲什麼它會說他們是未定義的,如果你將它們聲明爲全局變量。在函數中重新分配它們並不會改變這一點。 – Barmar