当前位置: 首页 > 知识库问答 >
问题:

圆形主体定位不工作在box 2d(cocos2dx)

越福
2023-03-14

我正在开发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-

我做错了什么?

提前谢谢。

共有1个答案

宁欣怿
2023-03-14

这两个物体在创建时是重叠的吗?很可能圆圈只是被矩形推开,因为矩形是静态的,圆圈是动态的。如果你尝试创建它们,但不要调用世界步骤函数来运行物理模拟,你可能会在屏幕上看到它们。

你可以创建它们,这样它们就不会重叠,或者至少不会重叠太多,或者让其中一个成为传感器,或者设置它们的冲突类别和掩码位,这样它们就不会交互。

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

 类似资料:
  • 我的问题是,我的Box2D身体有另一个位置,而不是我想为该身体渲染的LibGDX精灵。在我的渲染循环中,对于每个实体,我将其精灵的位置设置为实体的位置,然后渲染它。创建圆以外的Box2D形状时,Box2D不会将其从原点移动,LibGDX精灵也不会移动。如果我现在移动或设置身体的位置,我的精灵将始终跟随它。但不幸的是,这在圆形图形中是不可能的:因为LibGDX的Sprite#设置位置没有考虑Spri

  • 如何在静态box2d主体上绘制文本(字体)? 背景:我能够正确地在身体顶部绘制精灵。我这样做是通过有一个,它被投影在box 2dCamera上,就像box 2dSpriteBatch.set投影矩阵(box 2dCamera.combined);然后简单地使用身体的在正确的位置渲染精灵。 但是如果我尝试用同样的方法来处理字体,不幸的是,它的缩放非常大,如果我尝试缩放字体,它就不会出现。所以我假设我

  • 在我的情况下,矩形接触圆形,但我认为没关系。 起初,我试着用两个Ficture来做同样的身体,但旋转有一个问题:我不能有一个带旋转的Ficture,另一个没有。 我认为,它应该与关节有某种联系,但我不知道我应该使用什么关节。也许还有其他解决方案?

  • 我试着将一个双精度值四舍五入到小数点后两位: var x=0.68999995 var roundX=round(x*100.0)/100.0 println(roundX)//打印0.69 如果打印值是正确的...但var值不是我期望的,继续0.68999999999999995 我需要双值...不像其他StackOverflow答案那样字符串:(

  • 平铺贴图对象以像素表示x、y位置,以度表示旋转。 我正在从地图上加载坐标和旋转,并试图将它们指定给box2d实体。位置模型之间存在一些差异,例如平铺对象旋转以度为单位,而box2d躯干角度以弧度为单位。 如何将位置转换为BodyDef坐标x、y和角度,以便在正确的位置创建实体? 使用代码: 当旋转为0时工作,但当旋转不同于0时,主体定位不正确。 我在这里找到了一些提示: http://www.tu

  • 我有一个非常简单的使用Box2d的LibGDX游戏。现在,它只是一艘在地图上移动的船。如果我使用方法来改变船的位置,我可以通过键盘控制让船移动,但这显然没有利用Box2d的功能。我想使用方法来控制玩家船,但由于某种原因,无论我设置的力有多高或多低,该方法都不做任何事情。我还尝试了和,两者都有相同的效果:什么都没有。我通过测井证实,我的船的速度实际上保持在恒定的0.0,而不仅仅是微小的变化。 以下是