我想在box2D(Cocos2D)中創建一個橢圓對象。到目前爲止,我已經使用了b2CircleShape,但我已經意識到它不會再削減它,我必須有橢圓形的身體。它是否可行?我用b2PolygonShape嘗試過,但比我的邊緣是線性的,我需要它們彎曲。b2shape Ellipse?
有人有同樣的問題?有什麼建議麼?
我想在box2D(Cocos2D)中創建一個橢圓對象。到目前爲止,我已經使用了b2CircleShape,但我已經意識到它不會再削減它,我必須有橢圓形的身體。它是否可行?我用b2PolygonShape嘗試過,但比我的邊緣是線性的,我需要它們彎曲。b2shape Ellipse?
有人有同樣的問題?有什麼建議麼?
您可以用多邊形嘗試創建段「橢圓形」:橢圓將是肯定的凸多邊形,並可以添加段的合理數量。這只是一個近似值,但您可以稍後調整細分的數量,以便爲您提供性能與原始形狀近似之間的最佳比例。
我也使用了近似值。這有一些性能缺陷,但我猜沒有什麼大不了的。代碼(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;
自己創建嗎?作爲基礎,我會使用b2CircleShape作爲基類,並使用[此鏈接](http://en.wikipedia.org/wiki/Ellipse#Equations)來計算數學。 –
這是我的最後一個選項,拳頭,我想看看是否有一個更簡單的方法。不過,我現在看到它,我想我要創建一個自定義b2Shape類..我就等幾天,如果沒有彈出我將創建自己的課程並將其作爲答案發布在此處。 – paxx