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

我对彩色小球的优化做法:

就和判断小球是否落地是一样的做法,在小球超出左右边界的时候,就将这小球从数组里移除。

具体代码:

var b = BALLS[i];

if(b.x > WINDOW_WIDTH ||b.x < 0 ) BALLS.splice(i, 1);

不知道这中方法是否可行?会不会存在什么问题?

提问者:雨心圣 2014-09-14 12:58

个回答

  • l1uyub0b0b0
    2014-09-14 17:27:44
    已采纳

    如果最外层还有一个循环的话,i变量需要小心的控制,不能使用简单的for( i = 0 ; i < BALLS.length ; i ++ )


  • l1uyub0b0b0
    2014-09-15 16:35:34

    想一想,如果运行了BALLS.splice(i, 1),结合i++ 会错过对一个小球的检查。

  • 雨心圣
    2014-09-14 22:01:28

    具体代码是这样的:

    //循环更新彩色小球的变化

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

        var b = BALLS[i];

        if(b.x > WINDOW_WIDTH ||b.x < 0 ){

            BALLS.splice(i, 1);

        }else if(b.y >= WINDOW_HEIGHT-b.r){

            b.y = WINDOW_HEIGHT-b.r;

            b.vy = -b.vy*0.75;

        }

        b.x += b.vx;

        b.y += b.vy;

        b.vy += b.g;

    }