2012-10-04 55 views
1

幾天前,我爲一款名爲Broken History的遊戲製作了一款遊戲,我和我的夥伴一起玩,我自己開始了代碼,但最終得到了代碼的幫助來完成它。不一致的變量輸出

然後我開始爲同一款遊戲製作一個char gen,使用與之前工作完全相同的方法,一切都看起來不錯,每個元素都做了它應該做的。但是,當我第一次獲得結果文本時,變量curFaction被調用,它在第二次讀取用戶在選擇框中選擇的陣營時讀取undefined,即Saxathia。該變量是在$(document).ready()函數中分配的,因此理論上應該在調用它之前分配變量?

我不知道爲什麼會發生這種情況,變量被稱爲數組的一部分,這有什麼區別嗎?

enter image description here

這裏是JSLint的http://jsfiddle.net/CYe8J/31/

+0

哪條線路是gen的功能叫什麼? –

+0

你想問什麼。 jsFiddle工作正常。問題是什麼。你可以指出它在jsfiddle –

+0

嘗試使用螢火蟲 - 觀察控制檯,並看看底層系統是否在幕後做出任何意外的請求 - 也許遊戲正在做一個操縱這個變量的值的Ajax請求。 – Oliver

回答

1

你的問題是,你要設置的文字描述字符串加載頁面時,用戶已經選擇了派前。

// curFaction is undefined here, as user cannot select a faction 
// *before* the page is loaded!! 
var aLevel[1] = "Description1 of guy from " + curFaction + "."; 

最快修復是,當它需要產生的說明。這樣做的一個方法是將存儲功能aLevel,而不是字符串,如下所示:

var aLevel[1] = function() { "Description1 of guy from " + curFaction + "."; }; 
var aLevel[2] = function() { "Description2 of guy from " + curFaction + "."; }; 
var aLevel[3] = function() { "Description3 of guy from " + curFaction + "."; }; 

然後,當你需要你的描述,調用該函數:

// Original code: 
"Stuff about claim on throne. " + aLevel[temp6] + "."; 

// New code - note brackets after "aLevel[temp6]" 
"Stuff about claim on throne. " + aLevel[temp6]() + "."; 

我'created a Fiddle顯示了這一點。

順便說一句,你的代碼一般可以重構了很多 - 作爲一項規則,如果你發現你正在編寫相同的算法,一遍又一遍,然後你需要記住DRY principle :)

+0

謝謝:)它可能可以改變很多你是對的,但我沒有太多的經驗,最小化代碼哈哈 –