[英]Box2D: Convert Images into Physics body
我想將.bmp
文件的圖像轉換為物理物體。 我已經嘗試過,但是它不起作用,即我沒有得到想要的結果。 我在Google上進行了大量搜索,最后請大家幫我,因為我是新手。 我也想知道是否真的有一種方法可以將圖像轉換為box2D主體,或者我們不能簡單地做到這一點? 我嘗試了以下代碼:
我的addBrick函數
b2Body* addBrick(int x,int y,int w,int h,bool dyn=true)
{
b2BodyDef bodydef;
bodydef.position.Set(x*P2M,y*P2M); //Setting body position
if(dyn)
{
bodydef.type=b2_dynamicBody; // dynamic body means body will move
}
b2Body* body=world->CreateBody(&bodydef); //Creating box2D body
b2PolygonShape shape; //Creating shape object
shape.SetAsBox(P2M*w,P2M*h);
////////////// Adding Fixtures(mass, density etc) //////////////
b2FixtureDef fixturedef;
fixturedef.shape=&shape;
fixturedef.density=1.0;
fixturedef.restitution = 0.7;
body->CreateFixture(&fixturedef);
return body;
}
drawbrick邏輯:
void drawbrick()
{
pix[0].readBMPFile("brick.bmp");
pix[0].mDraw();
}
聲明為b2Body
b2Body* myBrick;
調用函數:
myBrick = addBrick(100,0,10,10);
drawbrick();
我要去哪里錯了? 有人可以發現我的錯誤嗎?
我發現將任何類型的圖像轉換為Box2D主體的最有效方法是使用PhysicsEditor工具( link )。 我不隸屬於他們,並且我是一名獨立的軟件開發人員。
編輯器允許您導入圖像,然后自動創建可導入“形狀緩存”的多邊形,然后在創建它們時將其加載到主體中。
Shape Cache API(您也可以從其網站獲得)如下所示:
class Box2DShapeCache
{
public:
// Static interface
static Box2DShapeCache& instance(void);
public:
bool init();
void addShapesWithFile(const std::string &plist);
b2Fixture* addHullFixtureToBody(b2Body *body, const std::string &shape);
/* Shapes created in the physics editor are in pixel dimensions. When they are loaded
* they are normalized to the size of maximum of the width/height.
*
*/
void addFixturesToBody(b2Body *body, const std::string &shape, float32 scaleMeters);
CCPoint anchorPointForShape(const string& shape);
CCSize imageSizeForShape(const string& shape);
const std::vector<b2Vec2>& hullPointsForShape(const std::string &shape);
void reset();
float getPtmRatio() { return ptmRatio; }
~Box2DShapeCache() {}
private:
std::map<std::string, BodyDef *> shapeObjects;
Box2DShapeCache(void) {}
float ptmRatio;
};
注意1-我已經非常有效地將此與Cocos2d-x結合使用了。 在此處的視頻( 鏈接 )中,它是用來創建蜘蛛正在行走的小行星的。
注2 –原始類稱為GB2ShapeCache。 這是寫在Objective-C和已經被移植( 在這里 )到C ++。 如果您需要另一個C ++版本,請告訴我(我的工具經過了稍微修改,可以從工具中導入凸包),我可以為您提供幫助。
這個有幫助嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.