2014-02-18 61 views
1

當我運行它時警報不明身份每當worldgeny == 400,我不知道爲什麼。 如果我在相同的地方提醒worldgeny,它會提醒NaN。我可能沒有解釋得很好。如果你感到困惑就問。 我的代碼是凌亂的,我知道這僅僅是一個測試,我提前身份不明,當提醒陣列

var addy; 
var worldgeny = parseInt(200); 
var mul5 = parseInt(0); 
var endhole; 
var holegen; 
var sizeh = 30; 
var sizew = 30; 
var savey = []; 

function cworld() { 
    mul5++; 
    posX++; 
    canvasContext.drawImage(imageGround, posX, worldgeny, 1, 400); 
     if(mul5 % 30 == 0){ 
      if(worldgeny==400){ 
       endhole = mul5/30; 
       endhole = endhole - 1; 
       worldgeny=savey[endhole]; 
       alert(savey[endhole]) 
      } 
      addy = parseInt(Math.floor((Math.random()*30)-17)); 
      holegen = parseInt(Math.floor((Math.random()*5))); 
      worldgeny += addy; 
      if(holegen==1){ 
       worldgeny = 400; 
      } 
      savey.push(worldgeny); 
     } 
    } 
setInterval(cworld, 1); 
+1

Ack!請壓縮! –

+1

我只能告訴你,它試圖訪問不存在的數組索引。 – tymeJV

+0

@tymeJV但索引已定義我已檢查 – Imadbush

回答

2
var savey = []; 

親自 由於這是一個空數組。

alert(savey[endhole]) 

不管是什麼endhole是,這個計算結果爲undefined,因爲savey.length0

savey.push(worldgeny); 

這實際上增加了元素savey。在你這樣做之前,每次你嘗試引用該數組的一個元素時,它將返回undefined

此外,請確保endhole是一個有效的索引。如果savey的長度爲N,請確保endhole介於0N-1之間。

編輯:看起來真正的罪魁禍首是你的任務endhole。首先你說endhole = mul5/30,但mul50,所以現在endhole0。在此之後,您將其遞減,將endhole的值保留爲-1,這是數組中的無效索引。

我不確定你想要實現什麼邏輯來解決這個問題,但是你的索引必須是0或更大。引用-1的數組索引將始終導致undefined

+0

但它總是沒有定義,即使我這樣做,因爲它循環 – Imadbush

+0

看到我的編輯有關你的'endhole'索引。它應該始終在'0'和你的數組的長度減1之間。 – Bucket

+0

好的謝謝,但是當我提醒'endhole'它是在我的數組的長度減1之間,所以它仍然沒有工作 – Imadbush