在过去的几天里,我一直把头撞在墙上,试图弄清楚如何正确扩展 CitrusEngine 的 Box2DPhysicsObjects 以生成我的自定义对象。我的目标是产生这种行为: 期望行为的例子。
这是为了模拟我的英雄在挥动剑攻击时向使用输入确定的方向冲刺。剑“休眠”直到攻击状态被激活。
我想我对如何正确使用 Box2D(尤其是关节)有一个根本的误解。如果有人能指出我正确的方向,我将永远感激不尽。我无法真正提供我当前的代码,因为它已经无法正常工作了。
在过去的几天里,我一直把头撞在墙上,试图弄清楚如何正确扩展 CitrusEngine 的 Box2DPhysicsObjects 以生成我的自定义对象。我的目标是产生这种行为: 期望行为的例子。
这是为了模拟我的英雄在挥动剑攻击时向使用输入确定的方向冲刺。剑“休眠”直到攻击状态被激活。
我想我对如何正确使用 Box2D(尤其是关节)有一个根本的误解。如果有人能指出我正确的方向,我将永远感激不尽。我无法真正提供我当前的代码,因为它已经无法正常工作了。
像上面这样的实现将具有非常差的性能,并且几乎在所有情况下都可能会出现隧道。因此一个解决方案是添加一个漏斗形状的传感器,并在这个传感器和我的英雄之间添加一个关节。实施:
override protected function createShape():void{
var radius:Number = 4;
var vertices:Vector.<b2Vec2> = new Vector.<b2Vec2>();
vertices.push(new b2Vec2(0,0));
for (var i:int = 0; i < 7; i++) {
var angle:Number = i / 6.0 * .5* Math.PI;
vertices.push(
new b2Vec2( radius * Math.cos(angle),
radius * Math.sin(angle) ));
}
var sword_shape:b2PolygonShape = new b2PolygonShape();
sword_shape.SetAsVector(vertices,8);
_shape = sword_shape;
}