zoukankan      html  css  js  c++  java
  • 取得鼠标点击处的物体

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

  • 相关阅读:
    NULL、nil、Nil、NSNull的区别
    URL中有中文字符,转码方法
    iOS极光推送 点击推送消息跳转页面
    iOS中响应者链条-触摸事件
    WKWebKit基础
    iOS开发之详解正则表达式
    iOS中正则表达式的三种使用方式
    VS下载Github的项目引用报错
    RabbitMQ环境搭建
    ASP.NET Core之NLog使用
  • 原文地址:https://www.cnblogs.com/ywxgod/p/1698748.html
Copyright © 2011-2022 走看看