用JS实现方块碰撞
首先我们应用上次的内容——方块拖拽,利用方块拖拽来让两个方块进行碰撞。
我们可以先定义两个正方形方块,红色的div1,绿色的div2,我们来实现当div1碰撞div2时div2的颜色变为黄色
HTML代码如下:定义方块
1 <!DOCTYPE html>
2 <html lang="en">
3
4 <head>
5 <meta charset="UTF-8">
6 <meta http-equiv="X-UA-Compatible" content="IE=edge">
7 <meta name="viewport" content="width=device-width, initial-scale=1.0">
8 <title>Document</title>
9 <style>
10 body {
11 margin: 0;
12 }
13 #div1 {
14 width: 100px;
15 height: 100px;
16 background: red;
17 position: absolute;
18 left: 0;
19 top: 0;
20 }
21
22 #div2 {
23 width: 100px;
24 height: 100px;
25 background: green;
26 position: absolute;
27 left: 500px;
28 top: 200px;
29 }
30 </style>
31 </head>
32
33 <body>
34 <div id="div1"></div>
35 <div id="div2"></div>
36 </body>
37
38 </html>
利用上个文章的的拖拽内容:令div1可以拖拽
1 <script>
2 var div1 = document.getElementById('div1')
3 var div2 = document.getElementById('div2')
4
5 div1.onmousedown = function (event) {
6 var chaX = event.clientX - div1.offsetLeft
7 var chaY = event.clientY - div1.offsetTop
8
9 document.onmousemove = function (event) {
10 div1.style.left = event.clientX - chaX + 'px'
11 div1.style.top = event.clientY - chaY + 'px'
12 }
13
14 document.onmouseup = function () {
15 document.onmousemove = null
16 }
17
18
19 }
20
21
22 </script>
因为我们每次拖拽都要判断是否碰撞,我们的碰撞代码应该放在移动的里面
添加后:
1 <script>
2 var div1 = document.getElementById('div1')
3 var div2 = document.getElementById('div2')
4
5 div1.onmousedown = function (event) {
6 var chaX = event.clientX - div1.offsetLeft
7 var chaY = event.clientY - div1.offsetTop
8
9 document.onmousemove = function (event) {
10 div1.style.left = event.clientX - chaX + 'px'
11 div1.style.top = event.clientY - chaY + 'px'
12
13 if (div1.offsetLeft + div1.offsetWidth < div2.offsetLeft ||
14 div2.offsetLeft + div2.offsetWidth < div1.offsetLeft ||
15 div1.offsetTop + div1.offsetHeight < div2.offsetTop ||
16 div2.offsetTop + div2.offsetHeight < div1.offsetTop
17 ) {
18 div2.style.backgroundColor = ''
19 } else {
20 div2.style.backgroundColor = 'yellow'
21 }
22
23 }
24 document.onmouseup = function () {
25 document.onmousemove = null
26 }
27 }
28
29 </script>
可以看到我们在移动的代码里添加了判断条件
让div1的左边距加上div1的宽度小于div2的左边距,让div2的左边距加上div2的宽度小于div1的左边距,让div1的上边距加上div1的高度小于div2的上边距,让div2的上边距加上div2的高度小于div1的上边距,满足这些条件就是未碰上。
用JS实现方块碰撞的更多相关文章
- js实现方块弹珠游戏
下载地址:https://files.cnblogs.com/files/liumaowu/%E5%BC%B9%E4%B8%80%E5%BC%B9%E6%89%93%E6%96%B9%E5%9D%97 ...
- js实现方块的碰撞检测
文章地址:https://www.cnblogs.com/sandraryan/ 个人感觉.方块的碰撞检测比圆形麻烦~~ <!DOCTYPE html> <html lang=&qu ...
- js实现小球碰撞游戏
效果图: 效果图消失只是截的gif图的问题 源码: <!DOCTYPE html> <html lang="en"> <head> <m ...
- (原)用pixi.js 实现 方块阵点击后原地自转效果
源码 各位,请教一个问题,我这个还有BUG,我是想实现,点击一下可以 停止转动,然后再点一下重新转动.而不是一直加速,有没有什么好办法? PS:问题已经解决,谢谢评论的大神@Antineutrino ...
- js 拖拽 碰撞 + 重力 运动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- three.js raycaster射线碰撞的坑 (当canvas大小 不是屏幕大小是解决拾取物体的办法)
这里只是记录一下坑,方便查阅,内容主要援引自:three.js Raycaster 射线拾取 canvas不占满整屏时射线拾取存在偏差 1. 世界坐标系: 世界坐标系位于屏幕的中心(0,0,0),往右 ...
- Canvas+Js制作动量守恒的小球碰撞
目的:通过js实现小球碰撞并实现动量守恒 canvas我们就不多说了,有用着呢. 我们可以通过canvas画2D图形(圆.方块.三角形等等)3D图形(球体.正方体等待). 当然这只是基础的皮毛而已,c ...
- 前端学习:JS面向对象知识学习(图解)
前端学习:JS面向对象知识学习(图解) 前端学习:JS(面向对象)代码笔记 JS面向对象图解知识全览 创建类和对象 方式1:使用Object()函数 方式2:使用自变量 方式3:使用工厂函数 创建多个 ...
- VGA详解及色块碰撞示例
引言 VGA:video Graphics array,视频图形阵列,阴极射线显像管(CRT)显示器时代产物,很多老显卡.笔记本电脑.投影仪所用接口,已经比较过时. CRT是模拟设备,所以VGA也采用 ...
随机推荐
- vs2010中使用命令行参数
使用VS2010增加命令参数的时候老是不起作用,后面经过研究发现,所要增加的命令参数是一个相对文件路径,而默认的工作目录里面没有该文件,所以就没有找到,需要修改工作目录,这样命令行参数才能够起作用.
- numpy读取本地数据和索引
1.numpy读取数据 np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False) 做一个 ...
- 一文带你掌握【TCP拥塞窗口】原理
❝ 关注公众号:高性能架构探索.后台回复[资料],可以免费领取 ❞ 学过网络相关课程的,都知道TCP中,有两个窗口: 滑动窗口(在我们的上一篇文章中有讲),接收方通过通告发送方自己的可以接受缓冲区大小 ...
- Django(72)Django认证系统库--djoser
djoser是什么? 作用:Django认证系统的REST实现.djoser库提供了一组Django Rest Framework视图,用于处理注册.登录.注销.密码重置和帐户激活等基本操作.它适 ...
- best-time-to-buy-and-sell-stock-ii leetcode C++
Say you have an array for which the i th element is the price of a given stock on day i. Design an a ...
- 前端面试手写代码——call、apply、bind
1 call.apply.bind 用法及对比 1.1 Function.prototype 三者都是Function原型上的方法,所有函数都能调用它们 Function.prototype.call ...
- Oracle 整库备份还原
http://www.mamicode.com/info-detail-2481866.html sql语句 system用户登陆 查看表空间和存放位置 select t1.name,t2.name ...
- QuantumTunnel:内网穿透服务设计
背景 最近工作中有公网访问内网服务的需求,便了解了内网穿透相关的知识.发现原理和实现都不复杂,遂产生了设计一个内网穿透的想法. 名字想好了,就叫QuantumTunnel,量子隧道,名字来源于量子纠缠 ...
- 攻防世界 Misc 新手练习区 give_you_flag Writeup
攻防世界 Misc 新手练习区 give_you_flag Writeup 题目介绍 题目考点 gif图片分离 细心的P图 二维码解码 Writeup 下载附件打开,发现是一张gif图片,打开看了一下 ...
- js 透明度轮播图
js 透明度轮播图 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...