我試圖做一個簡單的基於回合的雙人遊戲(如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>
之前有問題。
是的,有更多的代碼,但這些是獨立的功能,從來沒有改變。 「'gridblock _」+ i「_」+「j」'是那裏的第一件事情之一(它在'makeGrid()'中定義),但其他所有使用它的基礎工作正常,所以我懷疑是那樣。對於'genStartPos(a,b,c,d)',我在'bTeamCharGen()'中定義了它們。 因此,當在'bTeamCharGen()'中調用時,參數不會通過'validStartPos'傳遞給'genStartPos(a,b,c,d)'?我可以看到這可能是一個問題,否則,但不與未捕獲的類型錯誤... –
@Kristen Ramcharan,你的a,b,c,d在'bTeamCharGen()'是本地的。它們只在這個函數中定義,所以'validStartPos()'不知道它們 – bearwithbeard
啊,好吧......但是假設我在'validStartPos()'中定義了它們(否則傳遞'bTeamCharGen() 「那麼這不應該成爲一個問題,我會繼續努力,非常感謝! –