直接用splice()去掉出界的小球

来源:5-1 性能优化

问天玄铁

2015-01-27 22:28

function updateBalls(){


   for( var 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 || balls[i].x>WINDOW_WIDTH+RADIUS){

        balls.splice(i,1);

       }

   }

}


写回答 关注

3回答

  • 日落伤心色
    2015-08-19 17:32:58

    我也是用这个,测试下来是可以的.保持在310个左右.不过我的跟你的不太一样

    function updateBalls(){
    	//遍历所有的小球,改变小球的状态
    	for(var 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 >= CANVAS_HEIGHT- RADIUS){
    			balls[i].y = CANVAS_HEIGHT- RADIUS;
    			balls[i].vy = -balls[i].vy*0.75;
    		}
    		if(balls[i].x+(RADIUS*2) < 0 || balls[i].x+(RADIUS*2)>CANVAS_WIDTH){
    			balls.splice(i,1);
    		}
    	}
    	console.log(balls.length);
    }


  • Pengweb
    2015-07-27 23:20:44

    我也尝试用了这个方法,但是时间长了,还是不行,还是会剧增,不知道是什么问题,不知道你解决了吗?

  • mysunnytime
    2015-02-11 16:52:57

    优化的方法是么?!赞!在哪里可以查到array函数文档啊?

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

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

96779 学习 · 1000 问题

查看课程

相似问题