矩形碰撞检测和圆形碰撞检测。

矩形碰撞检测:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
body {
margin: 0;
}
#wrap {
margin: 50px auto;
position: relative;
border: 1px solid #000;
width: 600px;
height: 500px;
}
#div {
position: absolute;
left: 0;
top: 0;
width: 100px;
height: 100px;
background: red;
cursor: move;
}
#div2 {
position: absolute;
left: 50%;
top: 50%;
margin: -50px 0 0 -50px;
width: 100px;
height: 100px;
background: yellow;
}
</style>
</head>
<body>
<div id="wrap">
<div id="div2"></div>
<div id="div">文字</div>
</div>
<script type="text/javascript">
(function(){
var div = document.querySelector(‘#div‘);
var maxX = div.offsetParent.clientWidth - div.offsetWidth;
var maxY = div.offsetParent.clientHeight - div.offsetHeight;
div.addEventListener(‘mousedown‘, function(e) {
e.preventDefault();
var start = {x: e.clientX,y: e.clientY};
var elOffset = {x: div.offsetLeft,y: div.offsetTop};
document.addEventListener(‘mousemove‘, move);
document.addEventListener(‘mouseup‘, end);
function move(e){
var dis = {x:e.clientX - start.x,y:e.clientY - start.y};
var x = dis.x + elOffset.x;
var y = dis.y + elOffset.y;
x = x<0?0:(x>maxX?maxX:x);
y = y<0?0:(y>maxY?maxY:y);
console.log(x);
div.style.left = x + "px";
div.style.top = y + "px";
if(getCollide(div,div2)){
div2.style.background = "green";
} else {
div2.style.background = "yellow";
}
}
function end(){
document.removeEventListener(‘mousemove‘, move);
document.removeEventListener(‘mouseup‘, end);
}
});
})();
//碰撞返回 true 否则 返回 false
function getCollide(el,el2){
var rect = el.getBoundingClientRect();
var rect2 = el2.getBoundingClientRect();
if(rect.right < rect2.left
||rect.left > rect2.right
||rect.bottom<rect2.top
||rect.top>rect2.bottom){
return false;
}
return true;
}
</script>
</body>
</html>

圆形碰撞检测:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
body {
margin: 0;
}
#wrap {
margin: 50px auto;
position: relative;
border: 1px solid #000;
width: 600px;
height: 500px;
}
#div {
position: absolute;
left: 0;
top: 0;
width: 80px;
height: 80px;
background: red;
cursor: move;
border-radius: 50%;
}
#div2 {
position: absolute;
left: 50%;
top: 50%;
margin: -60px 0 0 -60px;
width: 120px;
height: 120px;
background: yellow;
border-radius: 50%;
}
</style>
</head>
<body>
<div id="wrap">
<div id="div2"></div>
<div id="div"></div>
</div>
<script type="text/javascript">
(function(){
var div = document.querySelector(‘#div‘);
var maxX = div.offsetParent.clientWidth - div.offsetWidth;
var maxY = div.offsetParent.clientHeight - div.offsetHeight;
div.addEventListener(‘mousedown‘, function(e) {
e.preventDefault();
var start = {x: e.clientX,y: e.clientY};
var elOffset = {x: div.offsetLeft,y: div.offsetTop};
document.addEventListener(‘mousemove‘, move);
document.addEventListener(‘mouseup‘, end);
function move(e){
var dis = {x:e.clientX - start.x,y:e.clientY - start.y};
var x = dis.x + elOffset.x;
var y = dis.y + elOffset.y;
x = x<0?0:(x>maxX?maxX:x);
y = y<0?0:(y>maxY?maxY:y);
console.log(x);
div.style.left = x + "px";
div.style.top = y + "px";
if(getCollide(div,div2)){
div2.style.background = "green";
} else {
div2.style.background = "yellow";
}
}
function end(){
document.removeEventListener(‘mousemove‘, move);
document.removeEventListener(‘mouseup‘, end);
}
});
})();
//碰撞返回 true 否则 返回 false
function getCollide(el,el2){
var rect = el.getBoundingClientRect();
var rect2 = el2.getBoundingClientRect();
var R1 = rect.width/2;
var R2 = rect2.width/2;
var centerX = rect.left + R1;
var centerY = rect.top + R1;
var center2X = rect2.left + R2;
var center2Y = rect2.top + R2;
var x = Math.abs(center2X - centerX);
var y = Math.abs(center2Y - centerY);
if(Math.sqrt(x*x + y*y) <= R1+R2){
return true;
}
return false;
}
</script>
</body>
</html>

时间: 2024-12-24 19:20:34

矩形碰撞检测和圆形碰撞检测。的相关文章

碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞

一,原理介绍 这回有点复杂,不过看懂了还是很好理解的.当然,我不敢保证这种算法在任何情况下都会起效果,如果有同学测试时,发现出现错误,请及时联系我. 我们首先来建立一个以圆心为原点的坐标系: 然后要检测碰撞就只有两种情况了. 情况一,矩形全部都在一个象限内,如图: 当然,图中只是举个例子,不一定是只在第二象限,任何一个象限都行,只要是矩形全在该象限. 这种情况比较好解决,首先,我们计算出矩形每个角的坐标,然后用勾股定律依次算出这个角到圆心的距离是否小于或者等于半径.设这个角与圆心横坐标之差为d1

简单圆形碰撞检测

整理以前的文件时看到之前写过的圆形的碰撞检测,简单记录下. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <canvas id="cav" width="500" height=&quo

零基础HTML5游戏制作教程 第5章 碰撞检测

第5章 碰撞检测 几乎所有的游戏都需要碰撞检测.比如<贪吃蛇>,你需要检测蛇的前端是不是已经碰到了它的尾巴:比如<俄罗斯方块>,你需要检查方块是不是已经碰到了底部:比如<英雄联盟>,你需要判断adc的子弹或魔法是不是已经碰到了对方. 其实要做好碰撞检测是很难的,尤其是对于3d游戏或者图形复杂的2d游戏来说. 当然,对于简单图形来说,碰撞检测还是比较容易的,本章将分别介绍圆形的碰撞检测,矩形的碰撞检测,以及逻辑碰撞检测. 一,圆形碰撞检测 圆形间碰撞检测的原理是最简单的,

游戏中常用到的碰撞检测帮助类

游戏中咱们经常用到碰撞检测,一般的游戏引擎也会自带有自身的检测碰撞类,但有时候不过灵活,这时候我们希望自己可以自定义一些碰撞检测类.tong顶一些啊... import android.graphics.Rect; public class CollisionUtil { /** * 矩形碰撞检测 参数为x,y,width,height * * @param x1 *            第一个矩形的x * @param y1 *            第一个矩形的y * @param w1

“等一下,我碰!”——常见的2D碰撞检测

转自:https://aotu.io/notes/2017/02/16/2d-collision-detection/ 在 2D 环境下,常见的碰撞检测方法如下: 外接图形判别法 轴对称包围盒(Axis-Aligned Bounding Box),即无旋转矩形. 圆形碰撞 圆形与矩形(无旋转) 圆形与旋转矩形(以矩形中心点为旋转轴) 光线投射法 分离轴定理 其他 地图格子划分 像素检测 下文将由易到难的顺序介绍上述各种碰撞检测方法:外接图形判别法 > 其他 > 光线投射法 > 分离轴定理

Java游戏之碰撞检测

在进行Java游戏开发时,我们经常会遇到碰撞检测的问题.如坦克大战中,炮弹与坦克相遇发生爆炸:守卫者游戏中,守卫者发射的箭与怪物相遇使怪物失血:打飞机游戏中,飞机发送的子弹与敌机相遇干掉敌机.这些都需要实现碰撞检测. 我们先来看一类比较简单的碰撞检测:规则图形的碰撞检测. 矩形碰撞检测 作为一个练手的小游戏,游戏中的物体形状一般为矩形区域,这是规则图形.它的碰撞检测可以通过Java API中的Rectangle类来实现碰撞的检测. Rectangle指的是一个矩形区域,它通过指定左上角位置x和y

【读书笔记《Android游戏编程之从零开始》】18.游戏开发基础(碰撞检测)

1.矩形碰撞 所谓矩形碰撞,就是利用两个矩形之间的位置关系来进行判断,如果矩形的像素在另外一个矩形之中,或者之上都可以认为这两个矩形发生了碰撞. 如果单纯的去考虑哪些情况会判定两个矩形发生碰撞,倒不如反思考虑两个矩形之间不发生碰撞的几种情况.其实两个矩形不发生碰撞的情况就上下左右这四种. 下面通过实例项目来完成对应的四种判定. 先看实例效果图: 新建项目,游戏框架为 SurfaceView 游戏框架,修改 MySurfaceView 类如下: package com.example.ex4_15

绘制一些基本图形(例如矩形,圆形,椭圆,多边形)

drawRect:矩形 drawCircle:绘制圆形 drawOval:椭圆 drawPath:任意多边形 drawLine:直线 drawPoint:绘制点 代码示例 第一种 package com.example.examples_05_05; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Canvas; import android.graph

iOS 碰撞检测以及事件响应

*/ //碰撞检测 //碰撞检测de过程 //碰撞检测 //碰撞检测 //碰撞检测 //UIApplication-> UIWindow-> UIController-> 视图控制器view-> 父视图 ->子视图 //事件响应 //事件响应de过程 //事件响应 //事件响应 //事件响应 //反方向处理;UIApplication <- UIWindow <- UIController <- 视图控制器view <- 父视图 <- 子视图;