globalCompositeOperation带来的不一样的烟花

一.知识点

1.动画:

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

2.小球碰撞的状态:

ctx.globalCompositeOperation="xor";//lighter

二.代码

[html]  view plain copy
  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <canvas id="canvas" style="border:1px solid #aaa;display:block;margin:50px auto;">
  9. 当前浏览器不支持Canvas,请更换浏览器后再试
  10. </canvas>
  11. <script>
  12. var balls = [];
  13. window.onload = function(){
  14. var canvas = document.getElementById("canvas");
  15. var  context=canvas.getContext('2d');
  16. canvas.width = 1200;
  17. canvas.height = 800;
  18. for(var i=0;i<100;i++){
  19. var R=Math.floor(Math.random()*255);//可对一个数进行下舍入。0.1就是0    0.9就是1
  20. var G=Math.floor(Math.random()*255);
  21. var B=Math.floor(Math.random()*255);
  22. var radius=Math.random()*50+20;
  23. aBall={
  24. color:"rgb("+R+","+G+","+B+")",
  25. radius:radius,
  26. x:Math.random()*(canvas.width-2*radius)+radius,
  27. y:Math.random()*(canvas.height-2*radius)+radius,
  28. vx:(Math.random()*5+5)*Math.pow(-1,Math.floor(Math.random()*100)),//pow() 方法可返回 x 的 y 次幂的值。
  29. vy:(Math.random()*5+5)*Math.pow(-1,Math.floor(Math.random()*100))
  30. }
  31. balls[i]=aBall;
  32. }
  33. setInterval(
  34. function(){
  35. draw(context);
  36. update(canvas.width,canvas.height);
  37. },
  38. 50
  39. );
  40. }
  41. function draw(ctx){
  42. var canvas = ctx.canvas;
  43. ctx.clearRect(0,0,canvas.width,canvas.height);
  44. for( var i = 0 ; i < balls.length ; i ++ ){
  45. ctx.globalCompositeOperation="xor";//lighter
  46. ctx.fillStyle=balls[i].color;
  47. ctx.beginPath();
  48. ctx.arc(balls[i].x,balls[i].y,balls[i].radius,0,2*Math.PI);
  49. ctx.closePath();
  50. ctx.fill();
  51. }
  52. }
  53. function update(canvasWidth, canvasHight){
  54. for( var i = 0 ; i < balls.length ; i ++ ){
  55. balls[i].x += balls[i].vx;
  56. balls[i].y += balls[i].vy;
  57. if( balls[i].x - balls[i].radius<=0 ){
  58. balls[i].vx = -balls[i].vx;
  59. balls[i].x = balls[i].radius;
  60. }
  61. if( balls[i].x + balls[i].radius>=canvasWidth ){
  62. balls[i].vx = -balls[i].vx;
  63. balls[i].x = canvasWidth-balls[i].radius;
  64. }
  65. if( balls[i].y - balls[i].radius<=0 ){
  66. balls[i].vy = -balls[i].vy;
  67. balls[i].y = balls[i].radius;
  68. }
  69. if( balls[i].y + balls[i].radius>=canvasHight ){
  70. balls[i].vy = -balls[i].vy;
  71. balls[i].y = canvasHight-balls[i].radius;
  72. }
  73. }
  74. }
  75. </script>
  76. </body>
  77. </html>

canvas(彩色泡泡碰撞)相关推荐

  1. 绘制canvas彩色泡泡小球碰撞

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

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

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

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

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

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

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

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

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

  6. Canvas实现球体碰撞交互效果(一)

    一.Canvas简介 提到Canvas相信做前端开发的同学都不陌生,它是一个用于绘制图形的容器,我们会在一些特殊场景时需要用到Canvas,比如我们要在页面上显示一个流程图,这个流程图需要根据后端返回 ...

  7. body 页面点击事件处理,页面冒彩色泡泡,文字泡泡

    body 页面点击事件处理,页面冒彩色泡泡,文字泡泡,需要引用jQuery. 在这里插入代码片 var m_index = 0;$(document).ready(function($) {$(&qu ...

  8. svg+TwenMax混合彩色泡泡

    下载地址svg+TwenMax实现的多种彩色泡泡混合在一起. dd:

  9. html5使用canvas实现小球碰撞反弹实例

    使用 html5 中的 canvas, 实现小球相互碰撞并反弹,反弹算法比较简单. index.html <!DOCTYPE html> <html lang="en&qu ...

最新文章

  1. PointPillars:点云物体识别的快速编码
  2. Java设计模式圣经连载(05)-代理模式
  3. 网络推广专员浅析到2021年底至少3亿台华为设备将使用鸿蒙系统
  4. unet图片数据增强_numpy实现深度学习遥感图像语义分割数据增强(支持多波段)
  5. 15-垃圾回收相关算法
  6. SQL Server安装文件挂起错误解决办法
  7. winged edge翼边
  8. python3 字符串方法
  9. React Render props
  10. python安装好后打不开_解决安装pyqt5之后无法打开spyder的问题
  11. oracle重建spfile,Oracle修改spfile的位置
  12. Android xUtils3.0使用手册(二) - 数据库操作
  13. 【博弈论】取棋子游戏
  14. python pygame实现简单的网游
  15. [C++]求模与求余运算
  16. 可在手机浏览器下载文件的方法
  17. shader三种变量类型(uniform,attribute和varying)
  18. C# 窗体视频控件进入全屏模式和退出全屏模式
  19. LEP(Linux Easy Profiling)2017年度颁奖典礼在西邮隆重举行
  20. leetcode 1567. 乘积为正数的最长子数组长度python

热门文章

  1. 2021年全球与中国无纺布桌布行业市场规模及发展前景分析
  2. 一、linux驱动开发-3.1-pinctrl和gpio子系统
  3. The import java.io cannot be resolved (类库无法解析的问题解决 )
  4. html mailto 乱码,JavaScript mailto的用法解析
  5. java arrays.setall_Java程序员的日常—— Arrays工具类的使用
  6. 《Windows CE 大排档》封面和封底出炉啦!
  7. 屏幕小于6英寸的手机_手机屏幕越大越好?调查显示5-6英寸接受度最高
  8. 2023.6.26每日一题
  9. 华硕拆机之后解决无法进入windows7但能进入linux系统的办法
  10. 配置1台台式计算机5000以内,2020年5千顶级的电脑配置 如何配一台5000元配置的游戏主机...