我不得不徹底改造這個問題,因爲我不認爲我對我的問題足夠明確。在Box2D的身體內定位圓形狀網絡
我試圖學習Box2D Web的繩索。當我想要學習如何在一個剛體中放置多個形狀(以形成響應性凹面體)時,我開始遇到問題。我所做的一個假設是,如果我可以改變形狀的位置(這樣我就可以控制整個剛體的外觀),這種特徵只會非常有用。一個例子是創建一個具有兩個矩形形狀的「L」體,其中一個位於第一個形狀的下方和右側。
我已經得到了這麼遠 - 因爲我發現了SetAsOrientedBox方法,您可以在第三個參數(中心)中將方框的位置傳遞給SetAsOrientedBox方法。
一切都很好。但是當我試圖在一個剛體中創建兩個圓形時,我發現了不良行爲。我的直覺是使用SetLocalPosition方法(在b2CircleShape類中找到)。這似乎在一定程度上起作用。在調試繪圖中,身體響應它應該做的事情,但在視覺上(在調試中),它似乎沒有在他們的位置繪製形狀。它只是在中心位置繪製圓形。我意識到這可能是Box2D的調試繪製邏輯的一個問題 - 但對我來說,在這個問題上沒有在線模式,這似乎很奇怪。人們會認爲,在身體座標空間的不同位置創建兩個圓形將是一個受歡迎且記錄完備的現象。顯然不是。
下面是我用來創建機構的代碼。假設世界上已傳遞給此範圍有效:
// first circle shape and def
var fix_def1 = new b2FixtureDef;
fix_def1.density = 1.0;
fix_def1.friction = 0.5;
fix_def1.restitution = .65;
fix_def1.bullet = false;
var shape1 = new b2CircleShape();
fix_def1.shape = shape1;
fix_def1.shape.SetLocalPosition(new b2Vec2(-.5, -.5));
fix_def1.shape.SetRadius(.3);
// second circle def and shape
var fix_def2 = new b2FixtureDef;
fix_def2.density = 1.0;
fix_def2.friction = 0.5;
fix_def2.restitution = .65;
fix_def2.bullet = false;
var shape2 = new b2CircleShape();
fix_def2.shape = shape2;
fix_def2.shape.SetLocalPosition(new b2Vec2(.5, .5));
fix_def2.shape.SetRadius(.3);
// creating the body
var body_def = new b2BodyDef();
body_def.type = b2Body.b2_dynamicBody;
body_def.position.Set(5, 1);
var b = world.CreateBody(body_def);
b.CreateFixture(fix_def1);
b.CreateFixture(fix_def2);
請注意,我用的Box2D網(http://code.google.com/p/box2dweb/)與HTML5畫布。
我試過這與當前svn源代碼,它似乎工作正常。我只是添加了一個多邊形作爲地面形狀來放置兩個圓。您是否使用Box2DWeb的最新版本? – iforce2d
感謝您成爲唯一評論者我使用的版本在這裏(http://www.kirven.co.uk/html5/ball/box2d/Box2dWeb-2.1.a.3.js)。這有點亂,但這裏是URL(http://www.kirven.co.uk/html5/ball/test_environment.html)。主要的JS文件正在加載(bootstrap.js),我正在關注的方法是'createBall'方法。如前所述,我剛剛開始使用Box2D - 所以不要評論無組織代碼!期待意見。 :-) – shennan
你如何從一個非常簡單的例子開始。讓我們說一個顯示一個簡單的世界和一個正方形。我很難讓他們展示我希望他們的方式。事實上,我甚至不確定世界是否被正確創造。這看起來應該很容易,但到目前爲止一直是一個真正的麻煩製造者。 –