问答详情
源自:5-1 性能优化

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

ruti



提问者:慕丝0963956 2017-09-22 15:40

个回答

  • 祥哥的说
    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);
            }
        }
    }

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

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