而在JavaScript中使用charAt

时间:2012-10-16 08:45:56

标签: javascript parsing render pixel

我知道如果我可以创建一个文本文件并将其渲染为像素。第一次测试成功。我有一个像素。现在,当我放置更多像素时,它将无法工作。这是代码:

xhr=new XMLHttpRequest();
xhr.open("GET", "graphtest.prg", false);
xhr.send();
document.write(xhr.responseText);
var file=xhr.responseText;
var c=0;
var bad=false;
var val=0;
var rgbs="rgb(";
while(c<file.length && bad==false) {
    //alert(file.charAt(c));
    cc=file.charAt(c);
    if (cc=="P" || cc=="R" || cc=="G") {
        // magic
    }
    else {
        if (cc=="{") {
            if (val!=5) {
                var newelem=document.createElement("span");
                newelem.innerHTML="&nbsp;";
                /*newelem.style.width="1px";
                newelem.style.height="1px";
                newelem.position="absolute";*/
                newelem.className="graf";
            }
        }
        else if (cc=="'") {
            c++;
            cc=file.charAt(c);
            switch (val) {
                case 0:
                    //alert("RUN");
                    var num=""+cc.toString();
                    c++;
                    while(!isNaN(file.charAt(c))) {
                        num+=file.charAt(c).toString();
                        c++;
                    }
                    newelem.style.left=num+"px";
                    //alert(num);
                    val++;
                    c++;
                    continue;
                    break;
                case 1:
                    var num=""+cc.toString();
                    c++;
                    while(!isNaN(file.charAt(c))) {
                        num+=file.charAt(c).toString();
                        c++;
                    }
                    newelem.style.top=num+"px";
                    //alert(num);
                    val++;
                    c++;
                    continue;
                    break;
                case 2:
                    var num=""+cc.toString();
                    c++;
                    while(!isNaN(file.charAt(c))) {
                        num+=file.charAt(c).toString();
                        c++;
                    }
                    rgbs+=num+",";
                    //alert(num);
                    val++;
                    c++;
                    continue;
                    break;
                case 3:
                    var num=""+cc.toString();
                    c++;
                    while(!isNaN(file.charAt(c))) {
                        num+=file.charAt(c).toString();
                        c++;
                    }
                    rgbs+=num+",";
                    //alert(num);
                    val++;
                    c++;
                    continue;
                    break;
                case 4:
                    var num=""+cc.toString();
                    c++;
                    while(!isNaN(file.charAt(c))) {
                        num+=file.charAt(c).toString();
                        c++;
                    }
                    rgbs+=num+")";
                    //alert(num);
                    val++;
                    c++;
                    continue;
                    break;
                case 5:
                    newelem.style.backgroundColor=rgbs;
                    document.body.appendChild(newelem);
                    val=0;
                    rgbs="";
                    newelem=null;
                    cc="";
                    num="";
                    break;
            }
        }
        if (val==5) {
            newelem.style.backgroundColor=rgbs;
            document.body.appendChild(newelem);
            val=0;
            rgbs="";
            //newelem=null;
            //c;
            alert(file.charAt(c));
            cc="";
            num="";
        }
    }
    c++;
}

这是“图形文字”文件:

PRG{'100','200','0','255','0'}{'200','100','0','0','255'}

第一个像素成功渲染,但第二个像素没有背景颜色。这是解析问题还是别的什么?

1 个答案:

答案 0 :(得分:2)

现在解析器因为重复代码的大量而令人困惑。在每个交换机的情况下,你都会重复很多相同的代码,这是不必要的。

除此之外,我注意到的一件事是您的rgbs var在脚本开头用var rgbs="rgb(";初始化,但随后在rgbs="";结束时重新初始化像素解析。