老师, 6-2 上升到面向对象-炫彩小球小案例没懂。
1、小球数组推入数组,从数组删除。
for(var i = 0; i < ballArr.length; i++){
if(ballArr[i] == this){
ballArr.splice(i, 1)
}
}
2、随机数
this.dX = parseInt(Math.random() * 20) - 10;
this.dY = parseInt(Math.random() * 20) - 10;
this.color = colorArr[parseInt(Math.random() * colorArr.length)];
44
收起
正在回答
1回答
同学你好,可以参考以下思路来理解:
1、小球数组:用于存放小球实例
每一次触发鼠标监听事件,以下代码都会new一个Ball实例,并将其推进ballArr数组中
new Ball(x, y); // 创建实例
ballArr.push(this); // 将实例推进数组
所以页面中有多少个小球,ballArr数组中就会有多少个Ball实例。
但是,当一个小球的透明度小于0的时候,该小球在页面就消失了,此时就需要从数组中删除自己(为了提高性能)
通过for循环遍历ballArr数组,并判断哪个实例是自己,然后调用数组的splice方法删除即可。
for (var i = 0; i < ballArr.length; i++) { if (ballArr[i] == this) { // 判断ballArr数组中第几个实例等于this ballArr.splice(i, 1); // 删除数组中第i个实例 } }
2、随机数
小球在页面中一般是随机运动的(四面八方都会移动),所以需要随机生成水平方向的增量(x增量)和垂直方向的增量(y增量),比如:
this.dX = parseInt(Math.random() * 20) - 10;
表示水平方向的增量在-10~10之间,因为parseInt(Math.random() * 20)取值为0~20,分别减去10得到结果为-10~10。
同理,小球的颜色也是随机生成的,代码中定义了颜色值数组:
var colorArr = ['#66CCCC', '#CCFF66', '#FF99CC', '#FF6666','#CC3399', '#FF6600'];
从这个数组中随机选择一个颜色作为小球的颜色,此时只需随机获取一个下标值,就可以通过这个下标值来获取到数组中的颜色值,所以使用parseInt(Math.random() * colorArr.length),随机生成0~数组长度-1之间的随机整数作为下标值。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星