canvas(彩色泡泡碰撞)
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就是1
- var 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";//lighter
- ctx.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(彩色泡泡碰撞)相关推荐
- 绘制canvas彩色泡泡小球碰撞
globalCompositeOperation带来的不一样的烟花 一.知识点 1.动画: setInterval( function(){ d ...
- javascript实现的下彩色泡泡及下雪(使用了某位大侠分享的继承机制)
最近心血来潮,想写段能产生下雪效果及下彩色泡泡效果的javascript小程序,且刚看了某位大侠写的一系列用不同方法在javascript里 实现继承的文章,就想把里面的方法拿出来试下. 效果如下,点 ...
- MFC基于单文档制作吹彩色泡泡程序
1.代码如下: // 吹彩色泡泡Doc.h : interface of the CMyDoc class // /#if !defined(AFX_DOC_H__559CF0A7_41F7_48A5 ...
- html5 canvas爆炸,html5 canvas彩色爆炸的小球动画特效
特效描述:html5 canvas 彩色爆炸 小球动画特效.html5 canvas特效,有中心向四周爆炸的彩色小球,有开始和暂停按钮 代码结构 1. HTML代码 开始运动 停止运动 var can ...
- 相随与欢-彩色泡泡机的设计与实现
相随与欢 长安大学 信息工程学院 人工智能系 大一下-面向对象课程设计-彩色泡泡机题目详解 与欢行 一.题目与需求分析: 基于Qt框架的GUI设计与实现 需求: 1.绘制泡泡(颜色.大小等配置信息随机 ...
- Canvas实现球体碰撞交互效果(一)
一.Canvas简介 提到Canvas相信做前端开发的同学都不陌生,它是一个用于绘制图形的容器,我们会在一些特殊场景时需要用到Canvas,比如我们要在页面上显示一个流程图,这个流程图需要根据后端返回 ...
- body 页面点击事件处理,页面冒彩色泡泡,文字泡泡
body 页面点击事件处理,页面冒彩色泡泡,文字泡泡,需要引用jQuery. 在这里插入代码片 var m_index = 0;$(document).ready(function($) {$(&qu ...
- svg+TwenMax混合彩色泡泡
下载地址svg+TwenMax实现的多种彩色泡泡混合在一起. dd:
- html5使用canvas实现小球碰撞反弹实例
使用 html5 中的 canvas, 实现小球相互碰撞并反弹,反弹算法比较简单. index.html <!DOCTYPE html> <html lang="en&qu ...
最新文章
- PointPillars:点云物体识别的快速编码
- Java设计模式圣经连载(05)-代理模式
- 网络推广专员浅析到2021年底至少3亿台华为设备将使用鸿蒙系统
- unet图片数据增强_numpy实现深度学习遥感图像语义分割数据增强(支持多波段)
- 15-垃圾回收相关算法
- SQL Server安装文件挂起错误解决办法
- winged edge翼边
- python3 字符串方法
- React Render props
- python安装好后打不开_解决安装pyqt5之后无法打开spyder的问题
- oracle重建spfile,Oracle修改spfile的位置
- Android xUtils3.0使用手册(二) - 数据库操作
- 【博弈论】取棋子游戏
- python pygame实现简单的网游
- [C++]求模与求余运算
- 可在手机浏览器下载文件的方法
- shader三种变量类型(uniform,attribute和varying)
- C# 窗体视频控件进入全屏模式和退出全屏模式
- LEP(Linux Easy Profiling)2017年度颁奖典礼在西邮隆重举行
- leetcode 1567. 乘积为正数的最长子数组长度python
热门文章
- 2021年全球与中国无纺布桌布行业市场规模及发展前景分析
- 一、linux驱动开发-3.1-pinctrl和gpio子系统
- The import java.io cannot be resolved (类库无法解析的问题解决 )
- html mailto 乱码,JavaScript mailto的用法解析
- java arrays.setall_Java程序员的日常—— Arrays工具类的使用
- 《Windows CE 大排档》封面和封底出炉啦!
- 屏幕小于6英寸的手机_手机屏幕越大越好?调查显示5-6英寸接受度最高
- 2023.6.26每日一题
- 华硕拆机之后解决无法进入windows7但能进入linux系统的办法
- 配置1台台式计算机5000以内,2020年5千顶级的电脑配置 如何配一台5000元配置的游戏主机...