文章目录
  1. 1. 鼠标获取刚体
    1. 1.1. 鼠标获取刚体–对刚体进行操作的前提
    2. 1.2. 返回总目录

本节主要介绍鼠标获取刚体。

鼠标获取刚体


鼠标获取刚体–对刚体进行操作的前提

Box2D中,只要提供一个AABB的坐标,b2World就可以返回一个数组,用于保存所有相交于此AABB的形状。

所以,为了利用鼠标获取刚体,首先要画出一个小区域,这个区域小到近似于一个点,然后遍历整个世界的形状,判断鼠标点击位置所画出的小区域是否与某个形状重合,如果有重合,再由这个形状得到这个形状所属的刚体。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function GetBodyAtMouse() {
//首先创建一个近似于点的小区域
var mousePVec = new b2Vec2(mousedwX, mousedwY);
//利用b2Vec2定义一个矢量,用来保存鼠标点击的点
var aabb = new b2AABB();
//利用b2AABB创建一个环境
aabb.minVertex.Set(mousePVec.x - 0.001, mousePVec.y - 0.001);
aabb.maxVertex.Set(mousePVec.x + 0.001, mousePVec.y + 0.001);
//设置aabb的左上角及右下角坐标,这里是以鼠标点击位置为中心创建了一个长、宽均为0.002的矩形区域
//然后查询与指定区域有重叠的刚体
var k_maxCount = 10; //设定所要查找形状的数量,注意合理设置其大小,过大会影响运行速度
var shapes = new Array(); //保存查找到的与已知边界盒相交的形状
var count = world.Query(aabb, shapes, k_maxCount); //在世界中查找与边界盒相交的maxCount个形状,并返回边界盒区域内实际包含的形状的个数
var findBody = null; //首先设定没有找到物体
for (var i = 0; i < count; ++i) {
if (shapes[i].GetBody().IsStatic() == false)
//条件假定查找到的形状不是静态刚体,比如墙
{
var tShape = shapes[i]; //将查找到的形状赋给tShape变量
var inside = tShape.GetBody(); //将tShape对应的刚体赋给inside
if (inside) //如果inside这个刚体存在
{
//那么返回这个刚体,并跳出遍历
findBody = tShape.GetBody();
break;
}
}
}
return findBody;
}

返回总目录

查看Github有更多内容噢:https://github.com/godbasin
更欢迎来被删的前端游乐场边撸猫边学前端噢

码生艰难,写文不易,给我家猪囤点猫粮了喵~

作者:被删

出处:https://godbasin.github.io

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

文章目录
  1. 1. 鼠标获取刚体
    1. 1.1. 鼠标获取刚体–对刚体进行操作的前提
    2. 1.2. 返回总目录