0

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

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'}

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

4

1 回答 1

2

由于大量重复代码,现在解析器很混乱。在您的每一个 switch 案例中,您都重复了许多相同的代码,这不是必需的。

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

于 2012-10-16T09:02:56.700 回答