balls[cnt++] = balls[i]这个技巧有其他方式代替吗?

来源:5-1 性能优化

慕丝0963956

2017-09-22 15:40

ruti



写回答 关注

3回答

  • 祥哥的说
    2018-12-22 20:55:24

    将滚出画布的小球进行删除处理,使用filter过滤函数方便些,可以边遍历边处理,课程上的是先遍历一边将符合要求的小球和不符合要求的小球以cnt进行分割,然后在遍历一边,逐项删除数组的尾部,使用filter简单易懂。
    balls=balls.filter((item)=>{
    return item.x+RADIUS>0 && item.x - RADIUS < WINDOW_WIDTH;
    });

  • 唐叶
    2018-06-06 22:24:17
    function updateBalls () {
        for (let i = 0; i < balls.length; i++) {
            balls[i].x += balls[i].vx;
            balls[i].y += balls[i].vy;
            balls[i].vy += balls[i].g;
    
            if (balls[i].y >= WINDOW_HEIGHT - RADIUS) {
                balls[i].y = WINDOW_HEIGHT - RADIUS;
                balls[i].vy = -balls[i].vy * 0.75;
            }
    
            /*小球已经出了左边界或者右边界,将小球删掉,防止占用内存*/
            if(balls[i].x + RADIUS <= 0 || balls[i].x - RADIUS >= WINDOW_WIDTH) {
                balls.splice(i, 1);
            }
        }
    }

    熊出没

    感觉这种方式更好理解

    2019-08-31 19:17:51

    共 1 条回复 >

  • 幕容峰
    2017-09-26 11:07:47

    应该是有的,等我知道了告诉你

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

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

96746 学习 · 1000 问题

查看课程

相似问题