【问题标题】:Circular body positioning not working in box2d(cocos2dx)圆形体定位在box2d(cocos2dx)中不起作用
【发布时间】:2014-09-01 10:41:45
【问题描述】:

我正在开发一个 cocos2dX 游戏。我使用 box2d 进行物理模拟。我正在尝试添加圆形主体和矩形主体。这是我的代码

// Create circular sprite and body
CCSprite* ball_sprite = CCSprite::create("ball.png");
this->addChild(ball_sprite);

b2BodyDef ballBodyDef;
ballBodyDef.type = b2_dynamicBody;
ballBodyDef.position.Set(screenSize.width/PTM_RATIO, screenSize.height/2/PTM_RATIO);//im running it in an iphone retina and screensize is 640x960
ballBodyDef.userData = ball_sprite;
ball_body = _world->CreateBody(&ballBodyDef);

b2CircleShape ballshape;
ballshape.m_radius = BALL_SIZE/2;

b2FixtureDef ballShapeDef;
ballShapeDef.shape = &ballshape;
ballShapeDef.density = 100.0f;
ballShapeDef.friction = 0.5f;
ballShapeDef.restitution = 0.7f;
ball_body->CreateFixture(&ballShapeDef);

// Create rectangular sprite and body
CCSprite* block_sprite = CCSprite::create("HelloWorld.png");
this->addChild(block_sprite);

b2BodyDef blockBodyDef;
blockBodyDef.type = b2_staticBody;
blockBodyDef.position.Set(0, screenSize.height/2/PTM_RATIO);
blockBodyDef.userData = block_sprite;
block_bodie = _world->CreateBody(&blockBodyDef);

b2PolygonShape blockshape;
blockshape.SetAsBox(B_WIDTH/PTM_RATIO,B_HEIGHT/PTM_RATIO);
b2FixtureDef blockShapeDef;
blockShapeDef.shape = &blockshape;
blockShapeDef.density = 100.0f;
blockShapeDef.friction = 0.5f;
blockShapeDef.restitution = 0.7f;
block_bodie->CreateFixture(&blockShapeDef);

矩形体按预期显示在屏幕上。

但圆形体并没有显示在屏幕上。

当我在更新函数中打印圆形体的位置时,位置是2000左右的大数字。而且每次运行程序时这个位置都不一样。

如果没有添加矩形体(注释 block_bodie->CreateFixture(&blockShapeDef); 行),那么圆形体会按照我的预期显示在屏幕上。

我在这里做错了什么?

提前致谢。

【问题讨论】:

    标签: ios cocos2d-x box2d


    【解决方案1】:

    这两个实体在创建时是否重叠?很可能圆形只是被矩形推开,因为矩形是静态的,而圆形是动态的。如果您尝试创建它们,但不调用 world Step 函数来运行物理模拟,您可能会在屏幕上看到它们。

    您可以创建它们以使它们不重叠,或者至少不重叠太多,或者使其中一个成为传感器,或者设置它们的碰撞类别和掩码位,使它们不相互作用。

    当然,我假设您正在查看调试绘图显示,这确实是确定物理引擎在做什么的唯一方法。

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多