簡體   English   中英

Box2D:將圖像轉換為物理主體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM