关于update 麻烦老师解答 谢谢

来源:6-2 上升到面向对象-炫彩小球小案例

dww1

2022-04-05 22:27:45

Ball.prototype.update=function(){
            //位置改变
            this.x+=this.dX;
            this.y-=this.dY;
            //半径改变
            this.r+=0.2;
            //透明度改变
            this.opacity-=0.01;
            this.dom.style.width=this.r*2+'px';
            this.dom.style.height=this.r*2+'px';
            this.dom.style.left=this.x-this.r+'px';
            this.dom.style.top=this.y-this.r+'px';
            //当透明度小于0的时候,就需要从数组中删除自己,DOM元素也要删除自己
            if(this.opacity<0){
                //从数组中删除自己
                for(var i=0;i<ballArr.length;i++){
                    if(ballArr[i]==this){
                        ballArr.splice(i,1);
                    }
                }
                //还要删除自己的dom
                document.body.removeChild(this.dom);
            }console.log(this);
        };

update()每隔20ms更新一次小球 是更新小球的x y  r opacity值 鼠标触碰时 会new出来小球 在构造函数Ball执行里面的语句时 do while语句 是只生成一次随机数吗 

而小球的 x y值不断产生变化 是因为 每隔20ms  update的r的变化 导致 w和h 的变化 来使x y进行变化的 还是说 this.x=this.dx this.y=this.dy 是由do while 一直执行随机数 的this.dx this.dy决定的


写回答

1回答

好帮手慕慕子

2022-04-06

同学你好,对于你的问题解答如下:

1、如果生成的随机数this.dX或者this.dY不为0,就不会进入循环,只生成一次随机数,如果两者都为0的话,会进入循环,生成多次随机数,防止dX和dY都是零。所以每次实例化,最终只会得到一个不为零的this.dX或this.dY。

2、x和y值的变化是依赖this.dX和this.dY的,由第一条回答可知,每次实例化,只会得到一个不为零的this.dX或this.dY,可以理解为实例化后得到的dX和dY的值是固定的,每次调用update方法时,在此基础上改变x和y的值,如下:

https://img.mukewang.com/climg/624d258c0944952906440212.jpg

而设置小球位置的left和top,同时受到this.r和this.x的影响,如下:

https://img.mukewang.com/climg/624d25c009fe666c07600251.jpg

祝学习愉快~


0

0 学习 · 15276 问题

查看课程