随机弹球窗口

1,971 阅读2分钟

我正在参加「码上掘金挑战赛」详情请看:码上掘金挑战赛来了!

1.背景:

用canvas组件画的弹球窗口,熟悉一下码上掘金的部署,整个项目主要由两部分组成,第一个是背景框,这边选用的是黑色背景,可以凸显出弹球的动画,然后就是弹球元素,其速度,颜色,大小运行轨道都是随机的。整个实现该过程还是十分有趣的,虽然比较简单,实际涉及的技术也不是很复杂,但是还是get到了码上掘金这个插件的方便之处。 项目链接: code.juejin.cn/pen/7142308…

2.代码实现

2.1实例化小球

        function Ball(x,y,velX,velY,color,size){
            this.x=x;//最开始x坐标,坐标的范围从 0 (左上角)到浏览器视窗的宽和高(右下角)。
            this.y=y;//y坐标
            this.velX=velX;//水平速度— 我们会给每个小球一个水平和竖直速度。实际上,当我们让这些球开始运动时候,每过一帧都会给小球的 x 和 y 坐标加一次这些值。
            this.velY=velY;//竖直速度
            this.color=color;//颜色
            this.size=size;//每一个小球会有自己的大小 — 也就是小球的半径,以像素为单位。
        }

2.2给小球添加draw动作


Ball.prototype.draw=function(){
            bc.beginPath();//声明我们现在要开始在纸上画一个图形
            bc.fillStyle=this.color;//定义这个形状的颜色 — 我们把这个加到小球的颜色属性
            bc.arc(this.x,this.y,this.size,0,2*Math.PI);//在纸上画出一段圆弧。有这些参数:x 和 y 是 arc 中心的坐标 — 也就是小球的中心坐标,arc 的半径 — 小球的半径,最后两个参数是开始和结束的角度,也就是圆弧对应的夹角。这里我们用的是 0 和 2 * PI,也就是 360 度(如果你设置成 0 和 1 * PI,则只会出现一个半圆,也就是 180 度)
            bc.fill();//声明我们结束了以 beginPath()开始的绘画,并且使用我们之前设置的颜色进行填充。
            bc.closePath();
        }

2.3.加上撞击侦察,从而当小球撞击边缘时,设置回弹

for(var j=0;j<balls.length;j++){
                if(!(this===balls[j])){
                    var dx=this.x-balls[j].x;
                    var dy=this.y-balls[j].y;
                    var distance=Math.sqrt(dx*dx+dy*dy);
        
                    if(distance<this.size+balls[j].size){
                        balls[j].color=this.color='rgb(' + random(0, 255) + ',' + random(0, 255) + ',' + random(0, 255) +')';
                    }
                }
            }
  

# 3.实现截图


![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a4e0c431e9c1465c9a82580efdf8ca4a~tplv-k3u1fbpfcp-watermark.image?)