解决方案 »

  1.   

    <script type="text/javascript"> 
    <!-- 
    var winWidth = 0; 
    var winHeight = 0; 
    function findDimensions() //函数:获取尺寸 

    //获取窗口宽度 
    if (window.innerWidth) 
    winWidth = window.innerWidth; 
    else if ((document.body) && (document.body.clientWidth)) 
    winWidth = document.body.clientWidth; 
    //获取窗口高度 
    if (window.innerHeight) 
    winHeight = window.innerHeight; 
    else if ((document.body) && (document.body.clientHeight)) 
    winHeight = document.body.clientHeight; 
    //通过深入Document内部对body进行检测,获取窗口大小 
    if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth) 

    winHeight = document.documentElement.clientHeight; 
    winWidth = document.documentElement.clientWidth; 

    //结果 
     document.getElementById("myCanvas").width= winWidth;
    document.getElementById("myCanvas").height= winHeight;

    findDimensions(); 
    //调用函数,获取数值 
    window.onresize=findDimensions; 
    //--> 
    </script> 
      

  2.   

    删除的时候看你传入null,是不是不想删除相应数组的元素?如过是这样的话,先判断参数是否为null,非null的时候,才删除,否则会默认删除第一个元素,如果你在外面再加了循环的话,那就可能清空了//删除元素
    function deletePlayer(i,j)
    {
        //data.push(letter);//添加到移除元素数组
        j && letters.splice(j,1);
        i && shots.splice(i,1);
    }
      

  3.   

    当子弹和字母相撞的时候,2则都要删除,当越界的时候 并不是2则同时越界,所以我传的NULL
      

  4.   

    你是不是谁越界删除谁?如果是的话,把你的deletePlayer函数换成我上面写的试试。因为你的deletePlayer函数在字母越界的时候,会删除这个字母,同时会删除第一个子弹,同样,在子弹越界的时候,再删除这个子弹的时候,也会删除第一个字母。原因我上面已经写了。
      

  5.   

    在你绘制字母的时候,这句(letters[i].y += GardeX;)的作用是什么?因为你的区域高度是450,这样当分数达到200多分的时候,字母的垂直坐标都会跑到你的区域之外去了,所以你看上去字母都被清空了,其实字母还在,只是在不可见区域了。
      

  6.   

    清空的问题是因为字母的y和GardeX关联的问题吗?
    不是很明白你说的第一个元素删不掉是指什么?第一个字母,还是第一个子弹?好像没有什么问题,你是怎么判断有没有被删除的?
      

  7.   

    可以打掉的。
    我测试的方法是,把onload里面的window.setInterval('randomLetter(1)',2000);改成randomLetter(1);,这样排除其他的干扰,然后打,letters和shots的数组长度都变成0了,证实可以消除。
      

  8.   

    Google Chrome 版本 34.0.1847.116