b2shape эллипс? - PullRequest
       12

b2shape эллипс?

3 голосов
/ 19 сентября 2011

Я пытаюсь создать эллиптический объект в box2D (Cocos2D).До сих пор я использовал b2CircleShape для этого, но я понял, что он больше не будет резать, у меня должно быть тело эллиптической формы.Это возможно?Я пробовал с b2PolygonShape, но чем мои края являются линейными, и мне нужно, чтобы они были изогнуты.

У кого-нибудь была такая же проблема?Какие-либо предложения?

Ответы [ 2 ]

2 голосов
/ 09 октября 2011

Вы можете попробовать с формой многоугольника и создать «эллипс» из сегментов: эллипс наверняка будет выпуклым многоугольником, и вы можете добавить разумное количество сегментов. Это будет лишь приблизительное значение, но вы можете настроить число сегментов позже, чтобы получить наилучшее соотношение между производительностью и приближением к исходной форме.

0 голосов
/ 11 июля 2013

Я также использовал приближение. Это имеет некоторые недостатки в производительности, но я думаю, ничего особенного. Код (Flash ActionScript 3, но вы должны легко его портировать):

var vertices:Vector.<b2Vec2> = new Vector.<b2Vec2>();
var a:Number = _image.width / 2 / PhysicsVals.RATIO;
var b:Number = _image.height / 2 / PhysicsVals.RATIO;
var segments:int = ellipse_approximation_vertices_count; (the more the more precise shape is, but the more time it takes to do collision detection)

var segment:Number = 2 * Math.PI / segments;

for (var i:int = 0; i < segments; i++)
{
    vertices.push(new b2Vec2(a * Math.cos(segment * i), b * Math.sin(segment * i)));
}

var shape:b2PolygonShape = new b2PolygonShape();
shape.SetAsVector(vertices, vertices.length);

var fixtureDef:b2FixtureDef = new b2FixtureDef();       
fixtureDef.shape = shape;
...