用 Canvas=DDraw.DrawSurface; 方法来动态写字,为什么每次都要把以前写过的字重新写一遍呢?
具体代码:<!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
    <script language="VBScript">
    </script>
    <script language="JavaScript">
 var interval=null;
        var loopFlag=0;
        var loopIndex=0;
        var arr=new Array(); //从文件中把坐标读到程序的数组里,文件里每一行有两个坐标x,y
 function IPoint(){
    this.x=0;
           this.y=0;
 }
 var i_x=0;i_y=0;
 var fso = new ActiveXObject("Scripting.FileSystemObject");
 var f = fso.OpenTextFile("C:/file/data1.txt",1);
        var iIndex = 0;
        while(!f.AtEndOfStream) {
     var s=f.ReadLine();
      var arrLL=s.split(/,/);
     var p=new IPoint();
     i_x=arrLL[0];
     i_y=arrLL[1];
     p.x=i_x;
     p.y=i_y;
     arr[iIndex]=p;
     iIndex++;
 }
 f.close(); //坐标以点的形式 画在DDraw里
 function lBegin(){
     //以前用setTimeout
     interval=window.setInterval('drawLine',50);
 } function drawLine(){
    creatLine(loopFlag);
           loopFlag++;
      if(loopFlag > arr.length-2){
        window.clearInterval(interval);
    }
 }//坐标以点的形式 画在DDraw里
  function creatLine(loopIndex){
     var x0=arr[loopIndex].x;
     var y0=arr[loopIndex].y;
     var x1=arr[loopIndex + 1].x;
     var y1=arr[loopIndex + 1].y;
     var Canvas=DDraw.DrawSurface;
     Canvas.Line(x0,y0,x1,y1);
     DDraw.DrawSurface = Canvas;  //每次都把以前画过得再生成一次,按道理应该只画本次循环生成的线
 }
    </script>
    </body>
    <input type="button" name = "Begin" value = "Begin" onClick = "lBegin()">    <object id=DDraw classid="clsid:369303C2-D7AC-11d0-89D5-00A0C90833E6"         style="background:#FFFFFF;position:absolute;left:px;top:40px;width:500px;height:500px;>
    </object>   
</html>

解决方案 »

  1.   

    你的代码运行有错误呀,
        <object id=DDraw classid="clsid:369303C2-D7AC-11d0-89D5-00A0C90833E6"         style="background:#FFFFFF;position:absolute;left:px;top:40px;width:500px;height:500px;>
        </object> 
    这段没有解析出来呀.
      

  2.   

    我这里运行不了,无法调试,试着改了一下,你试试:
    <!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <body>
        <script language="VBScript">
        </script>
        <script language="JavaScript">
     var interval=null;
     var delay = 50;
            var loopFlag=0;
            var loopIndex=0;
            var arr=new Array(); //从文件中把坐标读到程序的数组里,文件里每一行有两个坐标x,y
     function IPoint(){
        this.x=0;
               this.y=0;
     }
     var i_x=0;i_y=0;
     var fso = new ActiveXObject("Scripting.FileSystemObject");
     var f = fso.OpenTextFile("C:/file/data1.txt",1);
            var iIndex = 0;
            while(!f.AtEndOfStream) {
         var s=f.ReadLine();
          var arrLL=s.split(/,/);
         var p=new IPoint();
         i_x=arrLL[0];
         i_y=arrLL[1];
         p.x=i_x;
         p.y=i_y;
         arr[iIndex]=p;
         iIndex++;
     }
     f.close(); //坐标以点的形式 画在DDraw里
     function lBegin(){
         //以前用setTimeout
    drawLine.call(this);
     } function drawLine(){
        creatLine(loopFlag);
        loopFlag++;
     if(!(loopFlag > arr.length-2)){
     interval=window.setTimeout('drawLine',delay);
     delay+=50
     }
     }//坐标以点的形式 画在DDraw里
      function creatLine(loopIndex){
         var x0=arr[loopIndex].x;
         var y0=arr[loopIndex].y;
         var x1=arr[loopIndex + 1].x;
         var y1=arr[loopIndex + 1].y;
         var Canvas=DDraw.DrawSurface;
         Canvas.Line(x0,y0,x1,y1);
         DDraw.DrawSurface = Canvas;  //每次都把以前画过得再生成一次,按道理应该只画本次循环生成的线
     delay-=50
     window.clearTimeout(interval);
     }
        </script>
        </body>
        <input type="button" name = "Begin" value = "Begin" onClick = "lBegin()">    <object id=DDraw classid="clsid:369303C2-D7AC-11d0-89D5-00A0C90833E6"         style="background:#FFFFFF;position:absolute;left:px;top:40px;width:500px;height:500px;">
        </object>   
    </html>
      

  3.   

    不行呀兄弟,速度和以前还是一样的,问题不是出现在interval=window.setTimeout('drawLine',delay);  的占用内存上,还是出现在了var  Canvas=DDraw.DrawSurface这句话上面,因为每次画一个新线,这句话就把以前的线又给画上了,这是为什么呢?有没有别的画线的方法,在指定的区域画线(javascript).
      

  4.   

    大约大少个坐标?     var Canvas=DDraw.DrawSurface;
         Canvas.Line(x0,y0,x1,y1);
         DDraw.DrawSurface = Canvas;  这段这里感觉总别扭
    意思应该是保存画布,再画线,再把原来的画布画上去,这样肯定慢了可否直接画到画布上,不用重绘。
      

  5.   

    有4000个坐标,能画出100左右个字吧。
    这段代码我也不太会,从网上找的,var Canvas=DDraw.DrawSurface这句话我感觉就是把canvas帮定到DDraw.DrawSurface上了,Canvas.Line(x0,y0,x1,y1);这句话指定了坐标,DDraw.DrawSurface = Canvas这句话就是把线画了出来。
      假设我前100次不掉用DDraw.DrawSurface = Canvas这个语句,只调前两句,第101次的时候我再调用这三句,按道理应该把101个坐标的点画上来,可是它把前100次的坐标全都画出来了。真是不知道为什么
      

  6.   

    每次都生成一个新的画布,之前的应该不能存住。我刚才做了个实验,把Canvas做了个数组,当101一次的时候我就把Canvas[101]这个给了DDraw.DrawSurface,可是还是把以前的话出来了,所以是不是 var Canvas=DDraw.DrawSurface这句话出问题了,没能力解决呀。
      

  7.   

    你画4000个坐标,这个browser是否能承受?(机器配置?),也许还不是代码的原因。是画到第几个坐标的时候开始变慢?
      

  8.   

    <object id=DDraw classid="clsid:369303C2-D7AC-11d0-89D5-00A0C90833E6"         style="background:#FFFFFF;position:absolute;left:px;top:40px;width:500px;height:500px;">
        </object> 
    这是什么
      

  9.   

    我这里不能显示这个控件,Microsoft DirectAnimation Structured Graphics,不能测试
    光靠猜恐怕很能猜测