JS (canvas) 两个小球碰撞


<style media="screen">
           * {
               margin: 0;
               padding: 0;
           }
           canvas {
               box-shadow: 0 0 40px black;
               margin: 50px;
           }
</style>

 <canvas id="canvas" width="500" height="500">您的浏览器不支持canvas</canvas>

<script>
        var canvas = document.querySelector(‘canvas‘);
        var ctx = canvas.getContext(‘2d‘);

        var canvasW = canvas.width;
        var canvasH = canvas.height;

        //随机数函数
        function random(min,max) {
            return parseInt(Math.random()*(max - min) + min);
        }

        //构造函数
        function Ball(x, y, r, speedX, speedY) {
            this.r = r || random(10, 30);
            this.x = x || random(this.r, canvasW - this.r);
            this.y = y || random(this.r, canvasH - this.r);
            this.speedX = speedX || random(2, 5);
            this.speedY = speedY || random(2, 5);
            //draw方法
            this.draw = function() {
                ctx.beginPath();
                ctx.arc(this.x, this.y, this.r, 0, Math.PI*2, true);
                ctx.fillStyle = ‘red‘;
                ctx.fill();
            }
            //move方法
            this.move = function() {
                this.x += this.speedX;
                this.y += this.speedY;
                if(this.x < this.r || this.x > canvasW - this.r) {
                    this.speedX = -this.speedX;
                }
                if(this.y < this.r || this.y > canvasH - this.r) {
                    this.speedY = -this.speedY;
                }
                this.draw();//调用draw方法
            }
        }

        var ball1 = new Ball();
        var ball2 = new Ball();
        ball1.draw();
        ball2.draw();

        // 碰撞函数
        function isCrash(obj1, obj2) {
            var x = obj1.x - obj2.x;
            var y = obj1.y - obj2.y;
            var distance = Math.sqrt(x*x + y*y);//开方函数
            if(distance < obj1.r + obj2.r) {//判断碰撞
                obj1.speedX = -obj1.speedX;
                obj1.speedY = -obj1.speedY;
                obj2.speedX = -obj2.speedX;
                obj2.speedY = -obj2.speedY;
            }
        }

        var frameNum = 0;
        var prevDate = new Date();

        function gameloop() {
            frameNum++;
            ctx.clearRect(0, 0, canvasW, canvasH);
            ball1.move();
            ball2.move();
            isCrash(ball1,ball2);
            window.requestAnimationFrame(gameloop);//跟setTimeout相似,根据帧率执行
        }
        gameloop();</script>
时间: 2024-10-03 20:06:23

JS (canvas) 两个小球碰撞的相关文章

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

目的:通过js实现小球碰撞并实现动量守恒 canvas我们就不多说了,有用着呢. 我们可以通过canvas画2D图形(圆.方块.三角形等等)3D图形(球体.正方体等待). 当然这只是基础的皮毛而已,canvas的强大之处在于可以做游戏,导入模型,粒子效果,实现漫游又或者全景和VR. 这里我们介绍纯js写的2D小球碰撞.(主要是博主的Three.js不咋地) 好吧,老规矩,先上图! 额...很尴尬的是博主的截图功底不咋地,没有截下碰撞的瞬间. 话不多说,开始教程. 首先我们需要创建画布给它一个id

第七讲:HTML5中的canvas两个小球全然弹性碰撞

<html> <head> <title>小球之间的碰撞(全然弹性碰撞)</title> <script src="../js/jscex.jscexRequire.min.js" type="text/javascript"></script> </head> <body> <canvas id="mc" width="1200px&

HTML5 Canvas彩色小球碰撞运动特效

脚本简介 HTML5 Canvas彩色小球碰撞运动特效是一款基于canvas加面向对象制作的运动小球动画特效. 效果展示 http://hovertree.com/texiao/html5/39/ 效果图如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>HTML5 Canvas彩色小球碰撞运动特效

HTML5 Canvas绚丽的小球详解

实例说明: 实例使用HTML5+CSS+JavaScript实现小球的运动效果 掌握Canvas的基本用法 技术要点: 从需求出发 分析Demo要实现的功能 擅于使用HTML5 Canvas 参考手册 主要分为两个部分: 静态布局:小球的设计,包括小球的位置.颜色.大小和大小变化情况等,初始化小球的函数,渲染函数,Update函数 动态主体:变量.数组的的定义,小球显示时长定时,鼠标移动触发小球运动的函数 代码部分: canvas标签,提供绘图的画布 js逻辑:静态小球 其中,_init()函数

小球碰撞墙壁----干掉误差

之前一直在沿用之前听课学来的"千篇一律"的小球碰撞墙壁或者地板的计算方法. 忽然发现,小球碰撞的时候,其实小球有一部分是进入了墙的里面,在小球速度并不快的情况下,或许不明显,但是当小球速度变的更快,小球半径也更大的时候,就没法看了 效果如下 代码如下(所有代码都只在chrome或者safari下能用,因为requestAnimationFrame方法我并没有写兼容): <!doctype html> <html> <head> <meta ch

1-2018-3-2小球碰撞

http://118.190.20.162/view.page?gpid=T72 试题编号: 201803-2 试题名称: 碰撞的小球 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处.有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上,速度方向向右,速度大小为1单位长度每秒. 当小球到达线段的端点(左端点或右端点)的时候,会立即向相反的方向移动,速度大小仍然为原来大小. 当两个小球撞到一起

js计算两个时间相差的天数

day1='2014-03-31 00:00:01'; function get_day(day1,day2){ var s = day1; var dt = Date.parse(s.replace(/-/g,"/")); var day1 = new Date(dt); var s = day2; var dt = Date.parse(s.replace(/-/g,"/")); var day2 = new Date(dt); var date3=day1.g

js 保留两位小数

1. 最笨的办法....... function get() { var s = 22.127456 + ""; var str = s.substring(0,s.indexOf(".") + 3); alert(str); } 2. 正则 效果不错 <script type="text/javascript"> onload = function(){ var a = "23.456322"; var aNew

canvas之----浮动小球

<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> </head> <style> #canvas { border:solid 1px #ccc;} </style> <body> <div id="controls"> <input