2017-04-13 72 views
0

我試圖做一個簡單的基於回合的雙人遊戲(如FE)作爲即將到來的項目的做法。爲了確保在同一個網格圖塊上沒有字符重疊,我嘗試創建一個驗證器函數,可以針對每一代字符(隨機生成的位置)調用該驗證函數,以便我不會對相同的腳本進行輕微更改每個字符生成部分。我的原代碼(無功能)以上,最近一次嘗試(某些情況下)低於:試圖調用hasChildNodes方法,但獲取無法讀取空屬性

function bTeamCharGen() { 
     var a = 10; 
     var b = 15; 
     var c = 0; 
     var d = 5; 

     var bTeamLead = document.createElement("img"); 
     bTeamLead.src = "images/transp_img.gif"; 
     bTeamLead.height = "38"; 
     bTeamLead.width = "38"; 
     bTeamLead.className = "lead"; 
     bTeamLead.id = "bLead"; 
     genStartPos(); 
     var curr = document.getElementById("gridBlock_" + i + "_" + j); 
     if (curr.hasChildNodes()) { 
     while (curr.hasChildNodes()) { 
      genStartPos(a, b, c, d); 
     } 
     } 
     document.getElementById("gridBlock_" + i + "_" + j).appendChild(bTeamLead); 
     document.getElementById("bLead").style.background = "url('images/eirika_1_1.gif') 0 0"; 
     document.getElementById("bLead").style.backgroundRepeat = "no-repeat"; 
     //commented out basic structure for further characters here 
    } 

這是其中一個角色的原代碼。以下是我目前已經到達(並仍在與遺漏的類型錯誤):

var i, j; 

    //functions to generate grid and background 

    function genStartPos(minX, maxX, minY, maxY) { 
     i = Math.floor(Math.random() * (maxX - minX + 1) + minX); 
     j = Math.floor(Math.random() * (maxY - minY + 1) + minY); 
    } 

    function validStartPos() { 
     genStartPos(); 
     var curr = document.getElementById("gridBlock_" + i + "_" + j); 
     if (curr.hasChildNodes()) { 
     while (curr.hasChildNodes()) { 
      genStartPos(a, b, c, d); 
     } 
     } 
    } 

    function bTeamCharGen() { 
     var a = 10; 
     var b = 15; 
     var c = 0; 
     var d = 5; 

     var bTeamLead = document.createElement("img"); 
     bTeamLead.src = "images/transp_img.gif"; 
     bTeamLead.height = "38"; 
     bTeamLead.width = "38"; 
     bTeamLead.className = "lead"; 
     bTeamLead.id = "bLead"; 
     validStartPos(); 
     document.getElementById("gridBlock_" + i + "_" + j).appendChild(bTeamLead); 
     document.getElementById("bLead").style.background = "url('images/eirika_1_1.gif') 0 0"; 
     document.getElementById("bLead").style.backgroundRepeat = "no-repeat"; 

     //commented out basic structure for further characters here 
    } 

    function initialise() { 
     makeGrid(); 
     setBackground(); 
     bTeamCharGen(); 
     rTeamCharGen(); 
    } 

這是一個有點長而笨重,因爲我仍然在試圖neaten它了不少,但一切一直工作,直到我做到了。我將初始化函數作爲body的onload調用,<script><head>之內,因爲在<body>之前有問題。

回答

0

我不知道,但是......我想你想獲取元素時"gridBlock_" + i + "_" + jundefined

你叫genStartPos()不帶任何參數。所以你的ij是未定義的,所以你使用元素id字符串。

如果你不能傳遞變量genStartPos(),你需要爲maxX的,美星的一些默認值...

PS你還呼籲genStartPos(a, b, c, d)時,B,C,d是不確定的。或者,也許這只是不是所有的代碼

+0

是的,有更多的代碼,但這些是獨立的功能,從來沒有改變。 「'gridblock _」+ i「_」+「j」'是那裏的第一件事情之一(它在'makeGrid()'中定義),但其他所有使用它的基礎工作正常,所以我懷疑是那樣。對於'genStartPos(a,b,c,d)',我在'bTeamCharGen()'中定義了它們。 因此,當在'bTeamCharGen()'中調用時,參數不會通過'validStartPos'傳遞給'genStartPos(a,b,c,d)'?我可以看到這可能是一個問題,否則,但不與未捕獲的類型錯誤... –

+0

@Kristen Ramcharan,你的a,b,c,d在'bTeamCharGen()'是本地的。它們只在這個函數中定義,所以'validStartPos()'不知道它們 – bearwithbeard

+0

啊,好吧......但是假設我在'validStartPos()'中定義了它們(否則傳遞'bTeamCharGen() 「那麼這不應該成爲一個問題,我會繼續努力,非常感謝! –