Articles of 物理

Box2D身体与静态物体碰撞时抖动

我正在开发一个使用触摸在场景中移动物体的游戏。 现场有一个由静止的矩形体组成的边界墙。 当我沿边界移动物体时,发生碰撞时,它会抖动。 这是因为边界墙向外推动身体,而触摸推靠在墙上。 我正在使用线速度来移动使用触摸的身体。 我试图通过设置与边界墙碰撞时的身体的线速度为0来避免这种情况,但是它不起作用。 我试图沿着边界墙顺利地移动,没有任何不安。 我该如何解决这个问题? 以下片段移动身体接触。 线性速度vector具有朝向触摸点的方向。 游乐区内的运动平稳,但不在边界。 case TouchEvent.ACTION_MOVE: strikerBody.setLinearVelocity((pSceneTouchEvent.getX()-body.getPosition().x * PIXEL_TO_METER_RATIO_DEFAULT),(pSceneTouchEvent.getY()-body.getPosition().y * PIXEL_TO_METER_RATIO_DEFAULT)); 这些是bounadry墙: final Rectangle groundLeft = new Rectangle(camera.getWidth() / 2 – camera.getWidth() / 4, 1, camera.getWidth()/2, 20, this.resourcesManager.vbom); final Rectangle groundRight = new Rectangle(camera.getWidth() / 2 + camera.getWidth() / 4, 1, camera.getWidth()/2, 20, this.resourcesManager.vbom); final Rectangle roofLeft = […]

为跳跃机械添加宽容

我在平台游戏中为我的玩家写了一些跳码。 目前它有一些基本的逻辑,说如果他在地面上,玩家可以跳。 伪代码看起来像这样: ### Input Handling ### if(jumpButtonPressed){ if(onGround){ jump } } ### Player Update Loop ### onGround = false movePlayer resolveCollisions if(player collided with ground){ onGround = true } 这对于基本的静态瓷砖等级来说工作得很好,但是当玩家站在下降的平台上,或者在向下的斜坡上移动时,变得很难跳跃。 这样做的原因(在下降平台的情况下)就是平台已经从那个框架的下面移动了,所以那个时候他实际上并没有碰到地面,所以跳跃的条件不是实现。 有没有一种通用的方法来增加一些宽大的跳跃机制,这样玩家就可以跳起来,即使他们没有技术上的那种精确的框架? 这似乎应该是一个相当普遍的问题,但我似乎无法find任何类似的问题stackexchange或谷歌。

弹跳球isssue

我目前正在研究二维弹跳球物理,使球弹起和击退。 物理行为正常,但最后速度保持+3,然后0不停,即使球已经停止弹跳。 我应该如何修改代码来解决这个问题? 这里是video显示它是如何工作的。 注意:Bandicam无法logging-3和0之间的速度转换。因此,当球停止弹跳时它只显示-3。 http://www.youtube.com/watch?v=SEH5V6FBbYA&feature=youtu.be 这是生成的报告: https : //www.dropbox.com/s/4dkt0sgmrgw8pqi/report.txt ballPos = D3DXVECTOR2( 50, 100 ); velocity = 0; acceleration = 3.0f; void GameClass::Update() { // v = u + at velocity += acceleration; // update ball position ballPos.y += velocity; // If the ball touches the ground if ( ballPos.y >= 590 ) { […]

阻止玩家移动

我需要保持我的播放器模型不会穿过墙壁,树木等环境对象? 我试图找出是否应该使用刚体和内置的物理,但我觉得它太难以预测将会发生什么。 有没有一种方法可以防止玩家穿越环境物体? 目前我的玩家是一个包含一些原始形状和胶囊对撞机的三维模型。

基本的汽车运动,将2Dvector转换成3D问题

我试图按照这个家伙的方法转向一辆基本的汽车。 链接 。 这是第一个我可以把我的头,我试图将其转换为一个工作的3D版本的例子。 为了得到一些范围,我在OpenGL中渲染了一个代表一辆汽车的立方体,并且我正在使用GLM进行matrix操纵。 即使我正在试图获得一个3D例子工作,我只使用2D控件; 左/右的X轴和前/后的Z轴。 为了清楚起见,我已经将所有的vector显示为vec.x,vec.y,vec.z. 注意到vec.y没有太多的事情发生,因为现在汽车在XZ飞机上保持水平。 (如自上而下的游戏,但在3D环境中)。 我在屏幕上收到一些奇怪的反应,我不明白为什么。 我只能假设我误解了一些代码所属的地方。 这些是我的变数等: glm::vec3 carLocation(0,0,0); //location of car float carHeading = 0.0f; //direction car facing float carSpeed = 0.5f; //speed of car float steeringAngle = 0.0f; //angle of front wheel float wheelBase; //length of car glm::vec3 frontWheel; //vec 3 representing front wheel glm::vec3 backWheel; //vec […]

如何使用边界框碰撞实现在2D游戏中的跳跃?

问题: 我试图实现基本的跳转到我的2D游戏引擎,但多次失败。 基本上我迄今为止所做的是禁用重力,并使用单独的function向上移动播放器。 问题在于它看起来非常糟糕。 我已经检查了很多关于这个的线程,并find了一个应该工作的方法。 这是通过简单地增加另一个重力向上的力量。 这个力应该大于重力,但应该减小,直到重力再次变大。 问题是我无法执行它。 我的代码是用Javascript编写的,并使用html5canvas进行渲染。 注意! 这个代码只是整个引擎的一部分。 至于变数: c_objects – 玩家可以碰撞的所有对象的数组 玩家 – 对象文字与位置,宽度,移动速度,速度和速度倍增。 伪代码对我有好处,但我很想在JS中find答案。 码: // physics module collision function collision(obj_1, obj_2) { var collision = Boolean( obj_1.x <= (obj_2.x + obj_2.width) && obj_2.x <= (obj_1.x + obj_1.width) && obj_1.y <= (obj_2.y + obj_2.height) && obj_2.y <= (obj_1.y + obj_1.height) […]

OBB碰撞分辨率:长矩形抖动

我一直在研究一个物理模拟模块。 几乎一切正常,但我有一个问题,我已经在下面的video中演示。 正如你在video中看到的,如果一个物体没有角速度,那么一切正常。 但是,一旦角速度(即使只是一点点)被施加到物体上并且与地面碰撞,它就开始震动。 我检查碰撞,并使用SAT (分离轴定理)得到正常和MTD(最小平移距离)。 为了得到接触点,我检查两个多边形之间的交点。 如果有多个交点,我就可以find两个交点之间的点。 然后我使用normal,MTD和mass factor来解决重叠的对象。 为了解决这个碰撞,我使用了脉冲理论 。 你有什么想法可能会导致这种摇晃的影响? 这是否可能是由于接触点select错误造成的?

我如何计算太空中两个巨大的物体的运动?

我正在写代码模拟两个重力场的大规模机构的二维运动。 身体的质量是已知的,我有一个引力方程。 我知道从这个力量我可以得到坐标的微分方程。 我知道,我曾经解决这个方程,我会得到坐标。 我需要弥补一些初始的位置和一些初始速度。 我想结束坐标的序数微分方程的数值求解器来获得我可以用代码编写的公式。 难道有人会根据法则和初始条件来分解在t时刻计算x和y的公式吗?

倾斜的多边形对撞机2D造成箱对撞机2D在滑动的同时碰撞“碰撞”

我正在做程序上的地形生成。 到目前为止,我已经创建了网格,并附加了一个2D多边形对撞机。 地形由丘陵组成。 这样做之后,我把一个二维刚体与一个二维盒子对撞机一起代表玩家。 当我把球员放在上面,让他一直滑下去,有时他不能正常滑动,而是撞上山坡,突然间自己跳起来,就好像他绊倒了一样东西(尽管没有什么那里)。 奇怪的是,它不是一直在发生,有时候也是如此。 即使我让他在同一个地方滑倒,他再也碰不到了,除非在极less的情况下,他不会再这样做。 什么可能导致这个?

子弹3:一旦物体静止就施加力的问题

我刚开始使用子弹,我遇到了一个问题,一旦我的刚体在地板上复位,当我施加一个力时它就不会移动。 我已经创建了一个小演示,使用这里提供的hello world示例来展示这个。 for(int i = 0; i<30000; i++) // Give it a lot of time to hit the ground { dynamicsWorld->stepSimulation(1 / 60.f, 10); } btVector3 froce(0.0, 2000.0, 0.0); fallRigidBody->applyCentralForce(froce);// Apply a force on the Y axis for(int i = 0; i<300; i++) { dynamicsWorld->stepSimulation(1 / 60.f, 10); btTransform trans; fallRigidBody->getMotionState()->getWorldTransform(trans); std::cout << "Frame […]