globalCompositeOperation带来的不一样的烟花

一.知识点

1.动画:

setInterval(
            function(){
                draw(context);
                update(canvas.width,canvas.height);
            },
            50
        );

2.小球碰撞的状态:

ctx.globalCompositeOperation="xor";//lighter

二.代码

<!DOCTYPE html>
<html>
<head lang="en"><meta charset="UTF-8"><title></title>
</head>
<body>
<canvas id="canvas" style="border:1px solid #aaa;display:block;margin:50px auto;">当前浏览器不支持Canvas,请更换浏览器后再试
</canvas><script>var balls = [];window.onload = function(){var canvas = document.getElementById("canvas");var  context=canvas.getContext('2d');canvas.width = 1200;canvas.height = 800;for(var i=0;i<100;i++){var R=Math.floor(Math.random()*255);//可对一个数进行下舍入。0.1就是0    0.9就是1var G=Math.floor(Math.random()*255);var B=Math.floor(Math.random()*255);var radius=Math.random()*50+20;aBall={color:"rgb("+R+","+G+","+B+")",radius:radius,x:Math.random()*(canvas.width-2*radius)+radius,y:Math.random()*(canvas.height-2*radius)+radius,vx:(Math.random()*5+5)*Math.pow(-1,Math.floor(Math.random()*100)),//pow() 方法可返回 x 的 y 次幂的值。vy:(Math.random()*5+5)*Math.pow(-1,Math.floor(Math.random()*100))}balls[i]=aBall;}setInterval(function(){draw(context);update(canvas.width,canvas.height);},50);  } function draw(ctx){var canvas = ctx.canvas;ctx.clearRect(0,0,canvas.width,canvas.height);for( var i = 0 ; i < balls.length ; i ++ ){ctx.globalCompositeOperation="xor";//lighterctx.fillStyle=balls[i].color;ctx.beginPath();ctx.arc(balls[i].x,balls[i].y,balls[i].radius,0,2*Math.PI);ctx.closePath();ctx.fill();}}function update(canvasWidth, canvasHight){for( var i = 0 ; i < balls.length ; i ++ ){balls[i].x += balls[i].vx;balls[i].y += balls[i].vy;if( balls[i].x - balls[i].radius<=0 ){balls[i].vx = -balls[i].vx;balls[i].x = balls[i].radius;}if( balls[i].x + balls[i].radius>=canvasWidth ){balls[i].vx = -balls[i].vx;balls[i].x = canvasWidth-balls[i].radius;}if( balls[i].y - balls[i].radius<=0 ){balls[i].vy = -balls[i].vy;balls[i].y = balls[i].radius;}if( balls[i].y + balls[i].radius>=canvasHight ){balls[i].vy = -balls[i].vy;balls[i].y = canvasHight-balls[i].radius;}}}
</script>
</body>
</html>

绘制canvas彩色泡泡小球碰撞相关推荐

  1. canvas(彩色泡泡碰撞)

    globalCompositeOperation带来的不一样的烟花 一.知识点 1.动画: setInterval(             function(){                 d ...

  2. html5 canvas爆炸,html5 canvas彩色爆炸的小球动画特效

    特效描述:html5 canvas 彩色爆炸 小球动画特效.html5 canvas特效,有中心向四周爆炸的彩色小球,有开始和暂停按钮 代码结构 1. HTML代码 开始运动 停止运动 var can ...

  3. Canvas+Js制作动量守恒的小球碰撞

    目的:通过js实现小球碰撞并实现动量守恒 canvas我们就不多说了,有用着呢. 我们可以通过canvas画2D图形(圆.方块.三角形等等)3D图形(球体.正方体等待). 当然这只是基础的皮毛而已,c ...

  4. 彩色点缀,canvas炫彩小球样式背景

    canvas炫彩小球样式背景 效果展示 代码如下 1.css * {margin: 0;padding: 0; }.backCanvas canvas {display: block;margin: ...

  5. 01 C语言实现动态气泡碰撞和移动的效果,小球碰撞,Win7气泡壁纸,碰撞算法

    C语言实现动态气泡碰撞和移动的效果 作者 将狼才鲸 创建日期 2023-01-29 Git源码仓库地址:C语言实现动态气泡碰撞和移动的效果 CSDN文章地址:01 C语言实现动态气泡碰撞和移动的效果 ...

  6. pygame动画演示小球碰撞

    使用pygame实现动量定理的小球碰撞演示动画 动量定理我们在高中的时候就已经接触过了,是十分重要的物理定理.其中的完全弹性碰撞(机械能守恒)是十分典型的例子,机械能守恒和动量定理两个公式就可以推出小 ...

  7. 相随与欢-彩色泡泡机的设计与实现

    相随与欢 长安大学 信息工程学院 人工智能系 大一下-面向对象课程设计-彩色泡泡机题目详解 与欢行 一.题目与需求分析: 基于Qt框架的GUI设计与实现 需求: 1.绘制泡泡(颜色.大小等配置信息随机 ...

  8. javascript实现的下彩色泡泡及下雪(使用了某位大侠分享的继承机制)

    最近心血来潮,想写段能产生下雪效果及下彩色泡泡效果的javascript小程序,且刚看了某位大侠写的一系列用不同方法在javascript里 实现继承的文章,就想把里面的方法拿出来试下. 效果如下,点 ...

  9. MFC基于单文档制作吹彩色泡泡程序

    1.代码如下: // 吹彩色泡泡Doc.h : interface of the CMyDoc class // /#if !defined(AFX_DOC_H__559CF0A7_41F7_48A5 ...

最新文章

  1. 刚刚,官宣100000个炫酷微信红包封面,速度撸!
  2. 单片机数据转换php,51单片机之数据转移指令MOV、MOVX、MOVC等
  3. asp.net 2.0 设置表格高度为100%.
  4. cocos2dx scrollview和controlslider关联
  5. Java中数据类型的取值范围
  6. 【C语言简单说】一:第一个C语言程序
  7. C++语言基础 —— STL —— 容器与迭代器 —— pair
  8. 【stanford】梯度、梯度下降,随机梯度下降
  9. 已刷高格固件的路由器如何更换为潘多拉固件
  10. 【电脑故障】打印机驱动程序无法使用且print spooler错误1068
  11. 以艺术教育培养大学生艺术素质
  12. 毫米焦距到像素焦距换算
  13. 华为鸿蒙系统8月开源,华为正式宣布,鸿蒙系统8月开源,任正非却说:优先选用安卓...
  14. C盘太满怎么办? 这些文件可以放心删除!
  15. 三个遗传算法matlab程序实例
  16. ftp-主动模式(PORT)和被动模式(PASV)
  17. 为什么你无法拥有想要的幸福?人生所有的艰难皆有迹可循
  18. Firefly-RK3288 Ubuntu18.04 修改终端登录显示信息
  19. 最新优客API工具大全源码+调用第三方
  20. 7天酒店蝉联“年度杰出投资价值酒店品牌” 加速下沉市场拓展

热门文章

  1. 华为手机一键刷新在哪里_华为手机怎么开启应用自动更新?华为手机WIFI下自动更新软件教程...
  2. 华北电力大学微型计算机,华北电力大学2017年计算机等级考试报名时间
  3. Linux系统Wpa_supplicant用法小结(转)
  4. 阿里成立达摩院 1000 亿投研发,马云称达摩要比阿里活得长
  5. 支付宝在台湾被侵权,马云起诉欧付宝
  6. php获取哔哩哔哩追番_Ajax介绍及爬取哔哩哔哩番剧索引追番人数排行
  7. 如何安装和使用Ubuntu的新Web应用功能
  8. JDK7新特性详细说明及代码示例
  9. 梅西之三:让人大出所料,又忍俊不禁的七个瞬间
  10. tp5封装腾讯云cos文件上传sdk