问题标签 [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.
simulation - 您将如何使用 Box2D 物理引擎保持火车在轨道上的俯视图?
我认为使用像 Box2D 这样的物理库来模拟火车的顶视图沿着轨道、穿越开关等会很有趣。我需要什么关节和马达来完成这项工作?
我很好奇如何实现使汽车遵循样条轨道所需的力,以便它可以撞到其他火车车厢、行人、DeLoreans 等。只需对每个时间步说“汽车现在处于样条曲线(t)”会在物理引擎中产生过大的力。如果我理解正确,您必须用一种力将汽车固定在轨道上,用另一种力将其角度限制为与轨道平行(或用两种力将汽车的前部和后部固定在轨道上),然后创建另一个推动火车前进的力量。我正在寻找有关如何完成这些事情的一些细节。
math - 以弧度/秒为单位设置速度时,任何半径的车轮的恒速?
在 box2d 物理引擎中,我可以以弧度/秒为轮子上的关节设置电机速度。
我可以将速度设置为什么表达式,因此无论车轮半径如何,车轮的最终实际“速度”都是相同的。
目前,我将车轮速度设置为常数,wheelSpeed = 20。但这具有使大车轮比小车轮更快的效果。我希望将半径用于计算电机速度的弧度/秒,因此无论如何我都会获得相同的有效速度。
所以,如果它是一个小轮子,它必须比大轮子转动得更频繁。
我想我需要做类似 2 * PI * Radius / 180 * Speed 的事情?或类似的东西,但我无法确切地弄清楚。
我想以车轮电机速度(以弧度/秒为单位)为基础,因此无论车轮的大小如何,车轮的最终“速度”都是恒定的。
flash - Box2D:如何检测一个物体不再与另一个物体碰撞?
Flash Box2D 问题(但我猜“flash”部分无关紧要)
假设有一个对象 A,它是角色和一个对象 B,它是地面
假设角色只有在接触地面时才能行走。
有一个 box 2d contact listener,当一个物体接触到另一个物体时我可以检测到,所以我可以用它来听角色何时接触地面。但是我怎么知道角色是否离开了地面?
谢谢阅读。
flash - 如何计算 Box2D 中的承重?
我正在使用 Box2D(AS3/Flash 版本,如果重要的话),我正在尝试计算每个身体承载的重量。
我知道如何遍历所有物体,也知道如何轮询碰撞检测例程,但似乎一旦施加重量,碰撞力就会消失为零。我忽略了某种“总静力”属性吗?
box2d - 如何在 Box2D 中创建一个环绕世界
我需要用 Box2D 创建一个无尽的包装世界(其中所有对象的 X 坐标为 0 < X < 1000(比如说))。我玩过一些来回传送物体的游戏,但感觉可能有更好的方法——有什么想法吗?没有对象(或链接对象链)将具有大于约 50 的 X 跨度,例如小于屏幕的宽度。
相机一次只能看到世界的一小部分(大约 5% 的宽度,100% 的高度 - 世界大约是 30 高乘以 1000 宽)。
干杯。
box2d - box2d 碰撞组
有谁知道身体是否只在 (body1.categoryBits & body2.maskBits) && (body1.maskBits & body2.categoryBits) 发生碰撞?或者当 (body1.categoryBits & body2.maskBits) || 时它们是否已经发生碰撞?(body1.maskBits & body2.categoryBits)?
c++ - 处理无法实例化自身的对象的最佳方法?
我想我以前问过一些类似的问题,但我是在拐弯抹角。我认为这是我不能完全休息的真正问题。
我正在处理第三方库,并且有一个无法自行创建的对象b2Body
。b2World
必须实例化它。我个人不是很喜欢这种设计模式;我认为b2Body
应该能够独立于世界而存在,然后在需要时添加到世界中。无论如何,我已经b2Body
用我自己的类包裹了Body
,因为无论如何我都需要向它添加一些额外的东西。同样,我有一个World
包装器。现在我想我有 3 个选项:
- Have
Body
的构造函数需要一个指针,World
以便它可以被完全实例化(b2World::CreateBody
在内部某处调用)——即有一个像这样的构造函数Body *b = new Body(world_ptr)
- 传递
Body
给一些World::CreateBody
方法,比如图书馆已经这样做了——即Body *b = world.CreateBody(params);
- 复制所有数据,
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,等等。
documentation - Box2d 文档 - 过时了,还有更好的 api 参考吗?
我正在使用 cocos2d + box2d,当我浏览“Hello World”教程并尝试其他教程时,我发现许多结构似乎没有记录在最新的 api ref 中。
任何人都能够阐明发生了什么吗?或将我指向正确的方向,该人已经涵盖了新结构,例如 b2PolygonDef 更改为 b2PolygonShape 以及 circle + 谁知道还有什么,似乎自 09 年 8 月以来没有任何文档更新。
这是我能找到的关于这个问题的唯一信息,另一位用户说他们也发现了许多不匹配。
iphone - 如何为游戏创建地板?
我正在尝试在 iPhone 上构建月球着陆器风格的游戏。我有 Cocos2D,我将使用 Box2D。我想知道最好的方法是为比赛搭建场地。我需要能够创建地板的视觉效果和物理引擎的数据。
哦,我有没有提到我在图形编辑方面很糟糕?
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:
But there are two major problems with this:
Body
can never be constructed, even withWorld::CreateBody
(becauseb2Body
is private)- 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: