2017-02-16 43 views
1

這寫在p5.js /處理。我的問題是,所有的函數調用是從起點,當它應該更新到老了點我的起點不改變javascript

var aslider, lslider, sslider, newx, newy; 
function setup() { 
    createCanvas(300,300); 
    aslider = createSlider(1,359,17); #angle 
    lslider = createSlider(1,50,10); #length 
    sslider = createSlider(1,50,20); #amount of side 
} 

function draw() { 
    var angle = aslider.value(); 
    var length = lslider.value(); 
    var size = sslider.value(); 
    var startx = 100; 
    var starty = 100; 
    var radians = angle * (Math.PI/180); 
    for (var i = 0; i < size; i++) { 
    newx = Math.cos(radians) * length + startx; 
    newy = Math.sin(radians) * length + starty; 
    line(startx, starty, newx, newy); 
    startx = newx; #not changing 
    starty = newy; #not changing 
    } 
} 
+0

什麼時候是'startx'和'starty'「不更新」?在循環迭代期間或函數的後續運行期間(如果後續函數調用它是範圍問題)?你是否在'startx'上設置了斷點並在運行期間在調試器中進行了檢查?你確定'newx','newy'確實有新的價值嗎? – scrappedcola

+0

您必須將'startx/y'的聲明移動到函數的外部範圍。目前,每次調用函數時都會覆蓋它們。 – Teemu

回答

0

好像你startxstarty變量沒有改變的原因是因爲他們是在draw()功能。 draw()函數實質上就像一個while(true)循環,並且會不斷調用自身,直到您停止運行代碼。你聲明的draw()以下內:

var startx = 100; 
var starty = 100; 

這將導致變量每次都重設平局被調用,這是所有的時間。因此,這些變量看起來像是沒有變化。要解決這個問題,只需聲明並初始定義startxstarty高於setup(),這將使這些變量成爲全局變量,並防止出現在draw()中的此重新定義。