标标哟
2017-03-08 14:04
var cnt=0 for(var i=0;i<balls.length;i++){ if(balls[i].x+radius>0&&balls[i].x-radius<canvasWidth){ balls[cnt++]=balls[i]; } }
我知道老师的解释是,小球数组中的第0个到cnt-1个是在canvas画布中,可是这种数组的赋值怎么解释呢?就是balls[cnt++]=balls[i]这种数组赋值方式
++i与i++不在赋值运算中的话,应该是相同的,都是自增,没有运算前运算后
假设屏幕中有5个小球①②③④⑤,第五个小球在屏幕内,故有
balls[0] ☓ 不符合if语句
balls[1] ☓ 不符合if语句
balls[2] ☓ 不符合if语句
balls[3] ☓ 不符合if语句
balls[4] √ 符合if语句
故有balls[0] = balls[4]
现在数组的样子就为⑤②③④⑤,还是有5个元素。但是我们想做的是将屏幕之外的另外4个小球都删除,只剩下一个元素。即使第5个小球(balls[4])是在屏幕内的,但是它已经复制给了balls[0],覆盖了第一个元素,所以,只要将balls[0]之后的元素全部删除就可以了。
让我们来执行
while(balls.length > cnt) balls.pop();
balls.length = 5 cnt = 0
5 > 0 pop()
balls.length = 4 cnt = 0
4>0 pop()
balls.length = 3 cnt = 0
3>0 pop()
balls.length = 2 cnt = 0
2>0 pop()
balls.length = 1 cnt = 0
1>0 pop()
0 不大于 0 循环结束。我们的数组中只剩一个在屏幕里的小球,其他的都被删除了。
不知道我的理解是否有差错,希望可以帮助您。
看了你的博客后,把我给绕晕了,看了很久都没看明白
自己强答一波,相关思路我发到自己的博客了╮(╯▽╰)╭,大家可以看看
http://icke.site/2017/03/10/20170310-JavaScript-arr[i++]/
炫丽的倒计时效果Canvas绘图与动画基础
96746 学习 · 1000 问题
相似问题