JavaScript中的While和charAt

JavaScript中的While和charAt,javascript,parsing,render,pixel,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 r

我有一个想法,如果我可以做一个文本文件,并将其渲染为像素。第一次测试成功。我有一个像素。现在,当我放置更多像素时,它将不起作用。代码如下:

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++;
}

第一个像素渲染成功,但第二个像素没有背景色。这是一个解析问题还是其他问题?

现在,由于大量重复代码,解析程序令人困惑。在您的每一个交换机案例中,您都会重复许多相同的代码,这是不必要的


除此之外,我注意到的一件事是,您的
rgbs
var在脚本开头用
var rgbs=“rgb”(;
)初始化,然后用
rgbs=“”重新初始化
在像素解析的末尾。

嗯,您的解析器有点混乱。它在情况0、1、2、3和4中不是做完全相同的事情吗?您应该使用
而不是绝对定位跨距来显示图形您应该使用数字而不是字符串来表示“数字”,这样可以节省一些内存。您不需要
“+cc.toString();
cc
已经是一个字符串(js中没有字符),与空字符串的串联也会将其转换为字符串-它与
toString()一样无用
@Bergi 0代表左偏移,1代表顶部偏移,2、3和4代表RGB字符串。我将尝试删除
toString
。我有
!!谢谢!这就是问题所在:D
PRG{'100','200','0','255','0'}{'200','100','0','0','255'}