关于删除小球的pop()方法还有不理解的地方

来源:5-1 性能优化

暴走大熊

2016-04-19 13:55

pop()方法一次只能删除最后一个数组元素,而刷新率是每50ms一次,相当于一秒是刷新20次,也就是说一秒最多只能删除20个小球,但是每一秒产生新的小球数量却大于20,为什么实际上没有积压更多的小球呢,求解!!!

写回答 关注

2回答

  • 朱宝鑫
    2016-04-19 16:11:42
    已采纳

    删除的是以整个数组为目标,当满足超出屏幕的小球就会被删除! balls.push(aBall);

    //循环小球

    for(var i = 0;i < digit[num].length;i++){

    for(var j = 0;j <digit[num][i].length;j++){

    if(digit[num][i][j] == 1){

    var aBall = {

    //坐标位置x

    x:x+j*2*(cR+1)+(cR+1),

    //坐标位置y

    y:y+i*2*(cR+1)+(cR+1),

    //加速度

    g:1.5 + Math.random(),

    //x方向速度

    vx:Math.pow(-1,Math.ceil(Math.random()*1000)) * 4,

    vy:-5,

    color:colors[Math.floor(Math.random()*colors.length)]

    }

    balls.push(aBall);

    }

    }

    }


    //在屏幕中小球的数量

    var cnt = 0;

    for(var i = 0; i < balls.length;i++){

    if(balls[i].x + cR > 0 && balls[i].x - cR < window_width){

    balls[cnt++] = balls[i];

    }

    }

    //超出屏幕小球的数量

    while(balls.length > Math.min(300,cnt)){

    balls.pop();

    }


    鱼字头上一把... 回复暴走大熊

    while是自己走的吧~也可以改写成for循环呀~拿到cnt之后,他就只和balls.length有关。 删除不是因为加了几个球,而是因为球的位置发生了改变吧

    2016-10-16 16:52:00

    共 9 条回复 >

  • 飞过那座山
    2016-06-30 22:22:29

    其实我觉得直接改变balls的长度会更好!

    balls.length = Math.min(300, cnt);


炫丽的倒计时效果Canvas绘图与动画基础

学习HTML5中最激动人心的技术Canvas,彻底释放自己的创造力

96746 学习 · 1000 问题

查看课程

相似问题