我正在使用mousejoint拖动box2d中的物体,但它会导致惯性延迟.
是否存在瞬间拖动身体的任何方式?
这是我在尝试使用LÖVE引擎实现游戏时遇到的问题,该引擎覆盖了带有Lua脚本的box2d.
目标很简单:类似炮塔的物体(从顶部看,在2D环境中)需要定位自己,使其指向目标.
炮塔位于x,y坐标上,目标位于tx,ty.我们可以认为x,y是固定的,但是tx,ty往往会从一个瞬间变化到另一个瞬间(即它们将是鼠标光标).
转台有一个转子,可以在任何给定的时刻,顺时针或逆时针施加旋转力(扭矩).该力的大小有一个名为maxTorque的上限.
转台还具有一定的转动惯量,其作用于角运动,与质量作用于线性运动的方式相同.没有任何摩擦,因此如果它具有角速度,炮塔将继续旋转.
炮塔具有较小的AI功能,可重新评估其方向以验证其指向正确的方向,并激活旋转器.这发生在每dt(每秒约60次).它现在看起来像这样:
function Turret:update(dt)
local x,y = self:getPositon()
local tx,ty = self:getTarget()
local maxTorque = self:getMaxTorque() -- max force of the turret rotor
local inertia = self:getInertia() -- the rotational inertia
local w = self:getAngularVelocity() -- current angular velocity of the turret
local angle = self:getAngle() -- the angle the turret is facing currently
-- the angle of the like that links the turret center with the target
local targetAngle …Run Code Online (Sandbox Code Playgroud) 在Box2D中创建世界时,您可以选择让身体进入睡眠状态(如果它们停下来则不会对它们进行模拟).为什么不睡觉默认选项?它有什么缺点?
我正在做一个游戏,玩家用手指拖着船.我正在将Box2D用于游戏的物理方面.特别是,我正在使用b2MouseJoint将触摸事件附加到船上以让触摸事件拖动船.
但有一个问题是,船在被拖动时的移动方式是不现实的; 它可以简单地在任何方向拖动,在现实世界中,船只只能沿着它的长度移动,并且会有防水性,这使得难以改变船只运动的方向.因此,我需要一种模拟防水性的方法,以使船只运动逼真.
可以在Box2D中模拟它吗?线性阻尼和角度阻尼简单地使船难以移动,但我只是希望船在一个方向上易于移动而且它应该只能抵抗改变方向.
PS我不认为我需要发布我的代码来解决这个问题,但是如果你想查看代码摘录,请告诉我.
我刚刚开始使用Libgdx的Box2d引擎,但我根本不明白何时应该调用Contactlistener的方法.一方面是"开始接触",另一方面是"终端接触".我应该在哪里打电话给他们,以获得某个夹具接触他人的数量?我如何实现Contactlistener?教程中的重定向将回答我的问题.搜索谷歌时我没有找到任何东西.这一个对我帮助很大,但它是C++写的,而不是指到实现进入主gamecircle.谢谢我帮忙;)
是否可以动态改变Box2d b2Body的形状?我想这样做以实现以下目标.
一世).以一定的速率增加圆形的半径
ⅱ).更改精灵的边界框的尺寸以匹配更改的动画帧.
甲瓷砖地图对象帽子的位置的x,y中的像素和在度的旋转.
我正在从地图加载坐标和旋转,并尝试将它们分配给box2d Body.位置模型之间存在一些差异,例如Tiled对象旋转以度为单位,box2d体角度为弧度.
如何将位置转换为BodyDef坐标x,y和角度,以便在正确的位置创建正文?
使用代码:
float angle = -rotation * MathUtils.degreesToRadians;
bodyDef.angle = angle;
bodyDef.position.set(x, y);
Run Code Online (Sandbox Code Playgroud)
当旋转为0时工作,但当旋转不同于0时,正文未正确定位.
我在这里找到了几个提示:
http://www.tutorialsface.com/2015/12/qu ... dx-resolved /
和这里:
https://github.com/libgdx/libgdx/issues/2742
这似乎解决了这个确切的问题,但是这两种解决方案对我来说都没有用,在应用这些转换后,身体对象仍然处于错误状态.如果定位错误,我的意思是身体位于地图区域应该是,但根据其旋转稍微偏离.
我觉得它应该很简单,但我不知道如何调解Tiled和box2d位置之间的差异.
作为参考,这些是我从上面的链接尝试的两个解决方案(在将值x,y,宽度,高度从像素转换为世界单位之后):
float angle = rotation * MathUtils.degreesToRadians;
bodyDef.angle = -angle;
Vector2 correctionPosition = new Vector2(
height * MathUtils.cosDeg(-rotation - 90),
height + height * MathUtils.sinDeg(-rotation - 90));
bodyDef.position.set(x, y).add(correctionPosition);
Run Code Online (Sandbox Code Playgroud)
和
float angle = rotation * MathUtils.degreesToRadians;
bodyDef.angle = -angle;
// Top left corner of object
Vector2 correctedPosition = …Run Code Online (Sandbox Code Playgroud) 我需要用Box2D创建一个无尽的包装世界(所有对象的X坐标都是0 <X <1000(比方说)).我曾经玩过一些来回传送物品的游戏,但感觉可能有更好的方式 - 任何想法?没有对象(或链接对象链)将具有大于约50的X跨度,例如小于屏幕的宽度.
相机一次只能看到世界的一小部分(约5%宽度,100%高度 - 世界大约30高1000宽).
干杯.
我正在尝试用C++实验2D物理引擎.到目前为止,似乎最受欢迎的是Box2D.不幸的是,Box2D是一个严格的身体物理引擎,并不能真正帮助我想要尝试的东西.
我希望能够定义一个具有多个由弹簧连接的顶点的形状,这样当这个形状与刚性或其他非刚性形状碰撞时,它的形状将是灵活的.
现在我试图想办法在Box2D中只使用刚体来做这个,但似乎总有缺陷:
那么用C++做这种物理的最佳方法是什么?优选地,不必编写整个物理引擎.也许我只是错过了Box2D的一个功能.也许这不是正确的选择.那么什么是正确的选择?