我想将我的图像(.bmp
文件)转换为物理体。我试过了,但它不起作用,即我没有得到想要的结果。我已经在谷歌上搜索了很多,最后请大家帮助我,因为我是新手。另外我想知道是否真的有一种方法可以将图像转换为 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 中非常有效地使用了它。在此处的视频 (link) 中,它用于创建蜘蛛行走的小行星。
注意 2 - 原始类称为 GB2ShapeCache。它是用 objective-c 编写的,并已移植 ( here ) 到 C++。如果您需要另一个 C++ 版本,请告诉我(我的版本稍作修改以从该工具导入凸包),我可以提供帮助。
这有帮助吗?
关于c++ - Box2D:将图像转换为物理体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20021696/