所以最近我一直在Flash中使用Flash Builder和Flixel引擎开发游戏。我遇到了一个奇怪的障碍,首先运行的是我为基于.txt文件中的2D数组创建每个级别的屏幕的解析器,并且由于某种原因,每行中的最后一个字母是在switch语句中被忽略,决定了该索引代表什么。
这是我遇到问题的部分(在每种情况下发生的事情都是无关紧要的,我只是把它留给上下文,但它们都表现正确):
var row:int;
var column:int;
var currentColor:int = 0;
for (row = 0; row < m_levelData.length; row++) {
for (column = 0; column < m_levelData[0].length; column++) {
var offset:FlxPoint = new FlxPoint(0, 0);
var thisIndex:String = m_levelData[row][column];
//trace("This Line is " + m_levelData[row]);
trace("Current index is " + thisIndex);
//trace(row + " " + column);
switch(thisIndex) {
case Statics.GRID_BIN:
offset.y = (spaceSize.y / Statics.SPRITE_SCALE - BinFront.SIZE.y / Statics.SPRITE_SCALE) / 2;
offset.x = (spaceSize.x/Statics.SPRITE_SCALE - BinFront.SIZE.x/Statics.SPRITE_SCALE) / 2;
var color:uint;
if (m_colors.length < currentColor) {
color = Statics.COLOR_BLACK;
trace("No color found");
} else {
color = m_colors[currentColor];
currentColor++;
trace("Color is " + color);
}
makeBin(spaceSize.x * column + offset.x + levelOffset.x, spaceSize.y * row + offset.y + levelOffset.y, color);
break;
case Statics.GRID_BUILDER:
offset.y = (spaceSize.y/Statics.SPRITE_SCALE - BuilderMain.SIZE.y/Statics.SPRITE_SCALE)/2
offset.x = (spaceSize.x/Statics.SPRITE_SCALE - BuilderMain.SIZE.x/Statics.SPRITE_SCALE) / 2;
makeBuilder(spaceSize.x * column + offset.x + levelOffset.x, spaceSize.y * row + offset.y + levelOffset.y);
break;
case Statics.GRID_CONVEYOR:
var length:int = 0;
if (column == 0 || m_levelData[row][column - 1] != Statics.GRID_CONVEYOR) {
for (i = column; i < m_levelData[row].length; i++) {
if (m_levelData[row][i] == Statics.GRID_CONVEYOR) {
length++;
} else {
break;
}
}
offset.y = (spaceSize.y/Statics.SPRITE_SCALE - Statics.GRID_SIZE.y/Statics.SPRITE_SCALE)/2
offset.x = (spaceSize.x/Statics.SPRITE_SCALE - Statics.GRID_SIZE.x/Statics.SPRITE_SCALE) / 2;
makeConveyor(spaceSize.x * column + offset.x + levelOffset.x, spaceSize.y * row + offset.y + levelOffset.y, length);
}
break;
default:
trace("Nothing at this index, it was " + thisIndex);
}
Statics.GRID_BIN,Statics.GRID_CONVEYOR和Statics.GRID_BUILDER都是常量字符串(分别是“a”,“b”和“c”),我知道这一切都应该有效,因为它在我之前工作切换到解析器。现在,你对此的直接反应是问题是我的解析器,但我怀疑除了那个之外还有点麻烦。在switch
之前,我打印thisIndex
..(trace("Current index is " + thisIndex);)
的值,并且只要它是已解析的行中的最后一个字母(使用split(",")
,即使是它与switch
条件之一匹配,默认条件运行且没有任何反应。
有没有人见过这样的事情,或者我只是犯了一个非常愚蠢的错误?
答案 0 :(得分:0)
当您解析并比较从.txt加载的字符串时,您必须处理各种“隐藏”字符。在行结尾处,您可能遇到CR(\ r)LF(\ n)或两者或反过来。 它可能会有点繁琐,以找出适用于您的系统或.txt。
最后,您可以使用String.replace()
使其正常工作。
此处已在此处讨论过:How do I detect and remove "\n" from given string in action script?
除此之外,很难判断解析器是否有问题。 你使用switch {} - 语句看起来很好,应该可以工作。
如果您需要调试代码,请尝试使用硬编码const :String
代替.txt文件。然后设置一个断点(在Flash Builder中双击switch-statemen旁边的行号)并逐行逐步执行。