2012-10-04 49 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

谢谢:)它可能可以改变很多你是对的,但我没有太多的经验,最小化代码哈哈 –