问题标签 [box2d]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2148 浏览

simulation - 您将如何使用 Box2D 物理引擎保持火车在轨道上的俯视图?

我认为使用像 Box2D 这样的物理库来模拟火车的顶视图沿着轨道、穿越开关等会很有趣。我需要什么关节和马达来完成这项工作?

我很好奇如何实现使汽车遵循样条轨道所需的力,以便它可以撞到其他火车车厢、行人、DeLoreans 等。只需对每个时间步说“汽车现在处于样条曲线(t)”会在物理引擎中产生过大的力。如果我理解正确,您必须用一种力将汽车固定在轨道上,用另一种力将其角度限制为与轨道平行(或用两种力将汽车的前部和后部固定在轨道上),然后创建另一个推动火车前进的力量。我正在寻找有关如何完成这些事情的一些细节。

0 投票
3 回答
938 浏览

math - 以弧度/秒为单位设置速度时,任何半径的车轮的恒速?

在 box2d 物理引擎中,我可以以弧度/秒为轮子上的关节设置电机速度。

我可以将速度设置为什么表达式,因此无论车轮半径如何,车轮的最终实际“速度”都是相同的。

目前,我将车轮速度设置为常数,wheelSpeed = 20。但这具有使大车轮比小车轮更快的效果。我希望将半径用于计算电机速度的弧度/秒,因此无论如何我都会获得相同的有效速度。

所以,如果它是一个小轮子,它必须比大轮子转动得更频繁。

我想我需要做类似 2 * PI * Radius / 180 * Speed 的事情?或类似的东西,但我无法确切地弄清楚。

我想以车轮电机速度(以弧度/秒为单位)为基础,因此无论车轮的大小如何,车轮的最终“速度”都是恒定的。

0 投票
5 回答
3819 浏览

flash - Box2D:如何检测一个物体不再与另一个物体碰撞?

Flash Box2D 问题(但我猜“flash”部分无关紧要)

假设有一个对象 A,它是角色和一个对象 B,它是地面

假设角色只有在接触地面时才能行走。

有一个 box 2d contact listener,当一个物体接触到另一个物体时我可以检测到,所以我可以用它来听角色何时接触地面。但是我怎么知道角色是否离开了地面?

谢谢阅读。

0 投票
2 回答
1572 浏览

flash - 如何计算 Box2D 中的承重?

我正在使用 Box2D(AS3/Flash 版本,如果重要的话),我正在尝试计算每个身体承载的重量。

我知道如何遍历所有物体,也知道如何轮询碰撞检测例程,但似乎一旦施加重量,碰撞力就会消失为零。我忽略了某种“总静力”属性吗?

0 投票
1 回答
2070 浏览

box2d - 如何在 Box2D 中创建一个环绕世界

我需要用 Box2D 创建一个无尽的包装世界(其中所有对象的 X 坐标为 0 < X < 1000(比如说))。我玩过一些来回传送物体的游戏,但感觉可能有更好的方法——有什么想法吗?没有对象(或链接对象链)将具有大于约 50 的 X 跨度,例如小于屏幕的宽度。

相机一次只能看到世界的一小部分(大约 5% 的宽度,100% 的高度 - 世界大约是 30 高乘以 1000 宽)。

干杯。

0 投票
5 回答
19686 浏览

box2d - box2d 碰撞组

有谁知道身体是否只在 (body1.categoryBits & body2.maskBits) && (body1.maskBits & body2.categoryBits) 发生碰撞?或者当 (body1.categoryBits & body2.maskBits) || 时它们是否已经发生碰撞?(body1.maskBits & body2.categoryBits)?

0 投票
5 回答
726 浏览

c++ - 处理无法实例化自身的对象的最佳方法?

我想我以前问过一些类似的问题,但我是在拐弯抹角。我认为这是我不能完全休息的真正问题。

我正在处理第三方库,并且有一个无法自行创建的对象b2Bodyb2World必须实例化它。我个人不是很喜欢这种设计模式;我认为b2Body应该能够独立于世界而存在,然后在需要时添加到世界中。无论如何,我已经b2Body用我自己的类包裹了Body,因为无论如何我都需要向它添加一些额外的东西。同样,我有一个World包装器。现在我想我有 3 个选项:

  1. HaveBody的构造函数需要一个指针,World以便它可以被完全实例化(b2World::CreateBody在内部某处调用)——即有一个像这样的构造函数Body *b = new Body(world_ptr)
  2. 传递Body给一些World::CreateBody方法,比如图书馆已经这样做了——即Body *b = world.CreateBody(params);
  3. 复制所有数据,b2Body以便您可以随心所欲地使用它,然后在将其添加到世界后,它将“切换”以使用b2Body数据 - 即Body b以后world.addBody(b)

(1)和(2)意味着你不能Body没有 a World,我可能不需要,但有这个选项可能会很好[这样我就可以将它用作其他对象的模板等]。不知道还有什么其他优点和缺点。(3) 看起来更好,但要实现的工作量要多得多,这意味着我必须复制b2Body.

你怎么认为?我CW会这样做,这样没人会担心。


我仍然不能让这一切安息。这是每个选项的样子:

选项1:(我更喜欢)

选项2:(中间某处)

选项 3:(Box2D 是如何做到的)

选项 2 和 3 差别不大,但它改变了谁可以控制创建对象。

我将如何实际实施选项 3?World::CreateBody()必须调用b2World::CreateBody(args)which 调用b2Body::b2Body()并返回b2Body但从不调用Body::Body(args)which 是一个问题。将b2Body被完全初始化,但我的包装器没有地方做它的事情......更具体地说,我将如何写World::CreateBody(const BodyDef &bd)?假设 BodyDef 继承自 b2BodyDef,Body 继承自 b2Body,World 继承自 b2World,等等。

0 投票
2 回答
1254 浏览

documentation - Box2d 文档 - 过时了,还有更好的 api 参考吗?

我正在使用 cocos2d + box2d,当我浏览“Hello World”教程并尝试其他教程时,我发现许多结构似乎没有记录在最新的 api ref 中。

任何人都能够阐明发生了什么吗?或将我指向正确的方向,该人已经涵盖了新结构,例如 b2PolygonDef 更改为 b2PolygonShape 以及 circle + 谁知道还有什么,似乎自 09 年 8 月以来没有任何文档更新。

这是我能找到的关于这个问题的唯一信息,另一位用户说他们也发现了许多不匹配。

http://www.cocos2d-iphone.org/forum/topic/1683

0 投票
2 回答
559 浏览

iphone - 如何为游戏创建地板?

我正在尝试在 iPhone 上构建月球着陆器风格的游戏。我有 Cocos2D,我将使用 Box2D。我想知道最好的方法是为比赛搭建场地。我需要能够创建地板的视觉效果和物理引擎的数据。

哦,我有没有提到我在图形编辑方面很糟糕?

0 投票
1 回答
485 浏览

c++ - Impossible to inherit from this object?

Following up on this question, people have suggested I go with "option 3" which might look like this:

Try it online

But there are two major problems with this:

  1. Body can never be constructed, even with World::CreateBody (because b2Body is private)
  2. Even if it could, then the b2Body part wouldn't be initialized correctly (b2World::CreateBody needs to be called)

Does this mean I can never inherit from b2Body/b2World and follow this same design pattern? (keep in mind that I can't edit the b2* classes)

If so, I suppose you guys would recommend I just keep b2World and b2Body as member variables instead?


I think it comes down to these two options now: