1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 通过JS如何实现多个小球碰撞反弹

通过JS如何实现多个小球碰撞反弹

时间:2020-03-11 00:53:39

相关推荐

通过JS如何实现多个小球碰撞反弹

web前端|js教程

JS,小球,碰撞,反弹

web前端-js教程实现思路:小球的移动,是通过改变小球的left和top值来改变,坐标分别为(x,y)当x/y值加到最大,即加到父级的宽度或者高度时,使x值或者y值减小,同理当x值或者y值减到最小时,同样的使x值或者y值增加,以上的思路可以实现小球的碰壁反弹

江苏麻将棋牌源码,vscode锚点,ubuntu桌面没有图标,tomcat 苹果,sqlite与word,ios服务器端教程,织梦企业建站前台表单提交插件,前端框架安装插件,php 爬虫原理,php 算法,怎么学seo基础,网站模板扒皮者2.9,修复跳固定网页,表格css样式模板下载,京东html5页面布局,wpf.管理系统,php程序lzw

小球与小球之间的碰撞,要判断小球在被撞小球的哪个方向,从而判断小球该向哪个方向移动,同样的改变小球的坐标值,来实现小球的反弹

代买网源码,新版vscode打不开终端,ubuntu访问win7,tomcat启动地址,sqlite乱码,房地产需要网页设计吗,dede mysql数据库,.net服务器空间,phpcms 文库插件,前端框架 控件,作文小爬虫,php.ini 位置,哈密SEO,springboot运维,织梦万能标签分页,app应用网站html5模板下载,绿色 网页代码,asp access网站模板下载,dede登录后台dir,专题页面源码下载,快递管理系统设计源码,typecho程序下载lzw

实现代码:

婚庆交友类移动端源码,vscode需要jdk,ubuntu户外,设置tomcat重启,sqlite _id语法,新网的dns服务器,php 文件预览插件下载,增删改前端框架,爬虫ide,php_ds,seo专业培训需要多久,共享素材网站,免费的网页模版下载,b2bphp模板,超市管理系统页面模板,远航管理系统,java 自动投票程序 postlzw

小球碰撞* { margin: 0; padding: 0;}#wrap { height: 800px; width: 1300px; border: 1px solid red; /*小球设置相对定位*/ position: relative; margin: 0 auto; overflow: hidden;}p { width: 40px; height: 40px; border-radius: 50%; background-color: red; position: absolute; top: 0; left: 0; color: white; font-size: 25px; text-align: center; line-height: 40px;}

<!---->/*** 生成并返回一个从m到n全区间的随机数* @param {Object} m* @param {Object} n*/ function randomNum(m, n) {return Math.floor(Math.random() * (n - m + 1) + m); } /*** 生成一个随机颜色,并返回rgb字符串值*/ function randomColor() {var r = randomNum(0, 255);var g = randomNum(0, 255);var b = randomNum(0, 255);return "rgb(" + r + "," + g + "," + b + ")"; } //获得wrapp var wrapp = document.getElementById("wrap"); //定义数组存储所有的小球 var balls = []; //生成小球函数 function createBalls() {for (var i = 0; i 0) {ball.xflag = true; } else {ball.xflag = false; } if (Math.random() - 0.5 > 0) {ball.yflag = true; } else {ball.yflag = false; } //随机小球的背景颜色 ball.style.backgroundColor = randomColor(); ball.innerHTML = i + 1; //将小球插入当wrapp中 wrapp.appendChild(ball); //将所有的小球存储到数组中 balls.push(ball);} } createBalls(); //小球移动函数,判断小球的位置 function moveBalls(ballObj) {setInterval(function() { ballObj.style.top = ballObj.y + "px"; ballObj.style.left = ballObj.x + "px"; //判断小球的标志量,对小球作出相应操作 if (ballObj.yflag) {//小球向下移动ballObj.y += ballObj.speed;if (ballObj.y >= 800 - ballObj.offsetWidth) { ballObj.y = 800 - ballObj.offsetWidth; ballObj.yflag = false;} } else {//小球向上移动ballObj.y -= ballObj.speed;if (ballObj.y = 1300 - ballObj.offsetHeight) { ballObj.x = 1300 - ballObj.offsetHeight; ballObj.xflag = false;} } else {//小球向左移动ballObj.x -= ballObj.speed;if (ballObj.x <= 0) { ballObj.x = 0; ballObj.xflag = true;} } crash(ballObj);}, 10); } var x1, y1, x2, y2; //碰撞函数 function crash(ballObj) {//通过传过来的小球对象来获取小球的X坐标和Y坐标x1 = ballObj.x;y1 = ballObj.y;for (var i = 0; i < balls.length; i++) { //确保不和自己对比 if (ballObj != balls[i]) {x2 = balls[i].x;y2 = balls[i].y;//判断位置的平方和小球的圆心坐标的关系if (Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2) + 800 <= Math.pow(ballObj.offsetWidth + balls[i].offsetWidth, 2)) { //判断传过来的小球对象,相对于碰撞小球的哪个方位 if (ballObj.x < balls[i].x) { if (ballObj.y balls[i].y) {//小球对象在被碰小球的左下角ballObj.xflag = false;ballObj.yflag = true; } else {//小球对象在被撞小球的正左方ballObj.xflag = false; } } else if (ballObj.x > balls[i].x) { if (ballObj.y balls[i].y) {//小球对象在被碰撞小球的右下方ballObj.xflag = true;ballObj.yflag = true; } else {//小球对象在被撞小球的正右方ballObj.xflag = true; } } else if (ballObj.y > balls[i].y) { //小球对象在被撞小球的正下方 ballObj.yflag = true; } else if (ballObj.y < balls[i].y) { //小球对象在被撞小球的正上方 ballObj.yflag = false; }} }} } for (var i = 0; i < balls.length; i++) {//将所有的小球传到函数中,来实现对小球的移动moveBalls(balls[i]); }

运行效果:

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在zTree树插件中如何实现全国五级地区点击后加载

如何实现node+express个性化聊天室?

vue如何制作自动建站项目(详细教学)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。