在运行时更改玩家碰撞(b2PolygonShape)并保持身体姿势

时间:2011-10-26 19:43:00

标签: flash actionscript-3 box2d collision

我的 Box2d 游戏中有一个主角,发生b2PolygonShape次碰撞。当玩家蹲伏时,我正在将身体变为较小的b2PolygonShape。逻辑工作正常,但是当我改变碰撞的大小(高度)时,角色开始下降。

是否可以使用偏移量(localPosition?)创建新的主体,以便身体的位置保持不变?通过这种方式,我可以播放蹲伏动画并改变碰撞,而不必担心位置会发生变化并使我的精灵变为香蕉。

enter image description here

1 个答案:

答案 0 :(得分:1)

自从我使用Box2D已经有很长一段时间了,但我相信我有一个适合你的解决方案。

您可以使用b2PolygonDef.SetAsOrientedBox创建另一个b2PoligonDef(它允许您设置Box的中心),并改变您现在正在蹲伏和站立时所做的形状。

因此,如果你普遍使用蹲伏盒的定义为shapeDef.SetAsBox(1.0,1.0),现在你可以将它改为像shapeDef.SetAsOrientedBox(1,1,new b2Vec2(0,-1))

另一个选择是自己声明顶点,所以你会做类似的事情:

shapeDef.vertexCount = 4;
shapeDef.vertices[0].Set(-0.5, 0);
shapeDef.vertices[1].Set( 0.5, 0);
shapeDef.vertices[2].Set( 0.5,  1);
shapeDef.vertices[3].Set(-0.5,  1);