• 取得鼠标点击处的物体


    在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相重合。

  • 相关阅读:
    visio如何固定地调整图形大小
    C++实现linspace函数(等价于np.linspace()函数)
    OpenCV保存图像
    C++统计函数调用时间
    ubuntu安装Gparted工具
    OpenCV画线(line函数)
    Swift.StabilityinLanguage1Whatsdifferentstability
    llvm.107.clangoptions1Introduction
    adb 工具原⽣安卓解决WiFi⽹络受限以及修改NTP服务
    iOS全埋点解决方案APP和H5打通
  • 原文地址:https://www.cnblogs.com/ywxgod/p/1698748.html
Copyright © 2020-2023  润新知