取得鼠标点击处的物体

在box2d源代码Test.as中有个GetBodyAtMouse函数是用来取得鼠标点击处的物体的,自己修改了一下看如下代码:

private function getBodyAtMouse(includeStatic:Boolean = false):b2Body
{
	// Make a small box.
	var mousePVec:b2Vec2 = new b2Vec2(stage.mouseX/_physcale, stage.mouseY/_physcale);
	var aabb:b2AABB = new b2AABB();
	aabb.lowerBound.Set(mousePVec.x - 0.001, mousePVec.y - 0.001);
	aabb.upperBound.Set(mousePVec.x + 0.001, mousePVec.y + 0.001);
	
	// Query the world for overlapping shapes.
	var k_maxCount:int = 10;
	var shapes:Array = new Array();
	var count:int = _world.Query(aabb, shapes, k_maxCount);
	var body:b2Body = null;
	for (var i:int = 0; i < count; ++i)
	{
		if (shapes[i].GetBody().IsStatic() == false || includeStatic)
		{
			var tShape:b2Shape = shapes[i] as b2Shape;
			var inside:Boolean = tShape.TestPoint(tShape.GetBody().GetXForm(), mousePVec);
			if (inside)
			{
				body = tShape.GetBody();
				break;
			}
		}
	}
	return body;
}

4-8行 在鼠标点击处创建一个很小很小的边界盒,用于查询空间中是否有刚体与之重叠。

12行 Query函数负责查询与给定边界盒有重叠的刚体,并返回刚体个数。Query函数需要一个数组,用来保存查找到的刚体形状定义,还需要一个定值,表示数组的最大长度。

16行 根据刚体的形状定义取得刚体,判断是否是休眠状态。

18行 tShape.GetBody().GetXForm()返回b2XForm对象,是一个表示刚体的变形对象,就相当于flash中显示对象都有的transform属性一样,里面包含了刚体的角度,边界等;TestPoint方法查找给定的向量b2Vec(相当于flash中的Point类)是否与b2XForm相重合。

转载于:https://www.cnblogs.com/ywxgod/archive/2010/03/28/1698748.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值