首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >被忽略的AS3交换机条件

被忽略的AS3交换机条件
EN

Stack Overflow用户
提问于 2013-08-04 23:31:06
回答 1查看 107关注 0票数 0

最近,我在Flash中开发了一个游戏,使用了Flash和Flixel引擎。不过,我遇到了一个奇怪的问题,首先运行的是一个解析器,用于根据.txt文件中的2D数组为每个级别创建屏幕。出于某种原因,每一行中的最后一个字母在开关语句中被忽略,后者决定了该索引代表什么。

这是我遇到问题的地方(在每种情况下发生的事情都是无关紧要的,我只是把它放在上下文中,但它们的行为都是正确的):

代码语言:javascript
复制
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条件之一,默认条件也会运行,什么都不会发生。

有没有其他人看到过这样的事情,或者我只是犯了一个很愚蠢的错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-05 01:02:45

当解析和比较从.txt加载的字符串时,必须处理各种“隐藏”字符。在行尾,您可能会遇到CR (\r)、LF(\n)或两者或相反的情况。要找出哪些应用于您的系统或.txt,可能会有些费心。

最后,您可能可以使用String.replace()使其工作。

这里已经讨论过这一点,例如:How do I detect and remove "\n" from given string in action script?

除此之外,很难判断解析器是否有问题。您对开关{}-statement本身的使用看起来很好,应该正在工作。

如果需要调试代码,请尝试用硬编码的const :String (而不是..txt文件)来填充代码。然后设置一个断点(在Flash中,双击开关状态器旁边的行号),然后逐行遍历它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18048677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档