BOX2D中刚体的旋转会影响它的夹具中的形状中的顶点吗

如果不会,那如何判断一个顶点是否在刚体内?... 如果不会,那如何判断一个顶点是否在刚体内? 展开
 我来答
宿啥品8397
2015-05-17 · TA获得超过4530个赞
知道大有可为答主
回答量:3273
采纳率:60%
帮助的人:1814万
展开全部

[1]刚体特点

(1)只能是凸多边形

(2)分为静态和动态(密度为0即为静态刚体)

(3)动态刚体可以进入休眠,及在有重力的世界里可以停到空中。

当 Box2D 确定一个物体(或一组物体)已经停止移动时,物体就会进入休眠状态,消耗很小的 CPU
开销。如果一个醒着的物体接触到了一个休眠中的物体,那么休眠中的物体就会醒来。当物体上的关节或触点被摧毁的时候,它们同样会醒来。你也可以手动地唤醒物体。

通过物体定义,你可以指定一个物体是否可以休眠,或者创建一个休眠的物体。bodyDef.allowSleep = true;

bodyDef.isSleeping = false;

[2]创建刚体

1,创建矩形和圆形

int HYC_Modle::CreatBody(int x,int y,float ang,float w_t,float
h_t,b2ShapeType style,

int id_t,NAME_STYPE name,float32 density,bool isSensor,int
t_frame)

{

b2BodyDef BodyDef;

b2PolygonDef p_shapeDef;

b2CircleDef c_shapeDef;

BodyDef.position.Set(1.0f*x/HYC_WORLD_SCALE,1.0f*y/HYC_WORLD_SCALE);//设置刚体初位置

BodyDef.angle=ang*PI/180; //设置刚体初角度

body=SpiderWorld->CreateBody(&BodyDef);

body->SetUserData((void
*)&user_data);

body->WakeUp();

switch(style)

{

case e_circleShape:

c_shapeDef.density=density;

c_shapeDef.radius=1.0f*h_t/2.0/HYC_WORLD_SCALE;

c_shapeDef.friction=0.0f;//摩擦力//

c_shapeDef.restitution=0.0f;

c_shapeDef.isSensor=isSensor;//传感器true只监听不碰撞

body->CreateShape(&c_shapeDef);

body->SetMassFromShapes();//利用形状计算其自身的质量//

shape=body->GetShapeList();

break;

case e_polygonShape:

p_shapeDef.density=density;

p_shapeDef.friction=0.0f;//摩擦力//

p_shapeDef.restitution=0.0f;

p_shapeDef.isSensor=isSensor;

p_shapeDef.SetAsBox(

1.0f*w_t/2.0/HYC_WORLD_SCALE,1.0f*(h_t/2.0)/HYC_WORLD_SCALE);//长方形

body->CreateShape(&p_shapeDef);

body->SetMassFromShapes();//利用形状计算其自身的质量//

shape=body->GetShapeList();

break;

}

user_data.id=id_t;

user_data.stype=name;

user_data.shapetype=style;

}

2,创建三角形(通过设定各顶点位置,最多有八个顶点)

p_shapeDef.density=1.0f;

p_shapeDef.type=e_shapeTypeCount;

p_shapeDef.vertexCount=3;

p_shapeDef.type=e_shapeTypeCount;

p_shapeDef.vertices[0].x=0.0f;//逆时针或顺时针都可以p_shapeDef.vertices[0].y=0.0f;

p_shapeDef.vertices[1].x=0.2f;

p_shapeDef.vertices[1].y=0.2f;

p_shapeDef.vertices[2].x=-0.2f;

p_shapeDef.vertices[2].y=0.2f;

body->CreateShape(&p_shapeDef);

body->SetMassFromShapes();

3,创建一个刚体由多个形状组成

下列为三个矩形形状固化在一个刚体上

void HYC_BOX2D_Modle::CreateBox()//创建个空盒子做边界

{

b2BodyDef BodyDef;

b2Vec2 center;

b2PolygonDef p_shapeDef;

BodyDef.position.Set(1000/2.0f/HYC_WORLD_SCALE,700/2.0/HYC_WORLD_SCALE);

BodyDef.angle=0;

body=TestWorld->CreateBody(&BodyDef);//在这个世界创建刚体

center.x=1024.0f/HYC_WORLD_SCALE;

center.y=10.0f/HYC_WORLD_SCALE;

p_shapeDef.SetAsBox(1024.0f/HYC_WORLD_SCALE,10.0f/HYC_WORLD_SCALE,center,0);

body->CreateShape(&p_shapeDef);

center.x=10.0f/HYC_WORLD_SCALE;

center.y=768.0f/2.0/HYC_WORLD_SCALE;

p_shapeDef.SetAsBox(10.0f/HYC_WORLD_SCALE,768.0f/HYC_WORLD_SCALE,center,0);

body->CreateShape(&p_shapeDef);

center.x=1000.0f/HYC_WORLD_SCALE;

center.y=768.0f/2.0/HYC_WORLD_SCALE;

p_shapeDef.SetAsBox(10.0f/HYC_WORLD_SCALE,768.0f/HYC_WORLD_SCALE,center,0);

body->CreateShape(&p_shapeDef);

}

如果要创建动态刚体必须添加p_shapeDef.density=1.0f;

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式