Articles of box2d

Cocos2D:Box2D可以通过一种物体而不是另一种物体移动的物体

我正在使用Cocos2D 2.0和Box2D创建一个简单的平台游戏。 我试图创造一种不能被玩家移动的箱子物体,但是可以被一个大象物体移动。 当玩家冲向箱子时,应该阻止他死在他的轨道上(就像他正在碰到一个静态的Box2D身体)。 如果大象碰到它,它应该被打倒(就像大象正在碰到一个质量/密度小得多的dynamicBox2D体)。 我不能使用碰撞位掩码,因为我当然希望碰撞发生在两种情况下,我只是希望碰撞导致不同的事情取决于哪种types的对象正在打箱子。 任何人都有一个关于如何使这项工作的暗示? 提前致谢!

在2D游戏中使用box2d来控制精灵的移动是个好主意吗?

我试图使用Box2D来控制精灵运动。一些灼热的问题是: 当我试图将精灵移动到斜坡或精益屏障上时。 精灵会从斜坡上移走,这不是我想要的。 2.另外,我可以使用由cocos2d-x提供的setPosition或者CCAction来移动精灵并且使用SetTransform来更新身体位置。 但身体会失去它的身体局限,它会通过其他身体。 感谢您的时间,如果你们有任何解决scheme?

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 = […]

什么是更新物理帧速率的正确方法?

我在互联网上search,最终阅读了一篇建议文章, “修复你的Timestep!” 。 按照这篇文章,我提出了一个更新的方法,但是我仍然有问题。 每当我实例化更多的对象,在我的场景中,我的物理交互速度要慢得多。 我已经修复了其他子系统,他们在更新过程中浪费了周期,而且我已经跟踪了我的物理性能下降到这一点。 我认为我更新物理的方式是不对的,因为我为我的Box2D引擎使用了1.0 / 60.0的固定时间。 我在更新过程中犯的错误是什么? 什么是更新物理帧速率的正确方法? 这是我的代码: void Core::Update() { // Input this->cInput->Update(); // Physics this->cPhysics->Update(); // Keep frame rate static const double desiredTime = 1.0 / 60.0; static double currentTime = (double)(GetTickCount()); static double accumulator = 0.0; double newTime = (double)(GetTickCount()); double frameTime = newTime – currentTime; if(frameTime > […]

Box2d – 向移动的敌人附加射击箭

我正在向玩家发射一个箭头来移动敌人。 当箭射向敌人时,我想让它正好附在击中的地方,并使敌人(一个方格)倒在地上。 除了运动和旋转的后勤(它已经工作),我被困在两个身体的附着。 我试图先将它们焊接在一起,但是当它们倒下时,它们朝相反的方向旋转。 我已经认识到,一个旋转关节可能是我所追求的。 问题是,我无法find一种方法来将它们附着在正确的位置。 使用来自iforce2d的代码: b2RevoluteJointDef revoluteJointDef; revoluteJointDef.bodyA = m_body; revoluteJointDef.bodyB = m_e->m_body; revoluteJointDef.collideConnected = true; revoluteJointDef.localAnchorA.Set(0,0);//the top right corner of the box revoluteJointDef.localAnchorB.Set(0,0);//center of the circle b2RevoluteJoint m_joint = *(b2RevoluteJoint*)m_game->m_world->CreateJoint( &revoluteJointDef ); m_body->SetLinearVelocity(m_e->m_body->GetLinearVelocity()); 这附加在他们的两个要点的中心。 有谁知道我会怎么去获得确切的碰撞点,所以我可以链接这些? 这甚至是正确的方法吗? 更新: 我有确切的碰撞点。 但我仍然不确定这是甚么方法,我想要去做这件事。 真的,我只想把身体A连接到B,身体B不受任何影响。

Box2D`ApplyLinearImpulse`不工作,而`SetLinearVelocity`工作

我需要为我的游戏中的玩家模仿跳跃行为。 玩家由两个具有圆形和矩形形状的灯具组成。 矩形我用来检测地面,它是一个传感器。 有点跳跃我这样做: float impulseY = body->GetMass() * PLAYER_JUMPING_VEOCITY / PTM_RATIO * std::sin(PLAYER_JUMPING_ANGLE * PI / 180); body->ApplyLinearImpulse(b2Vec2(0, impulseY), body->GetWorldCenter(), true); 玩家不跳。 但是当我这样做: body->SetLinearVelocity(b2Vec2(0, PLAYER_JUMPING_VEOCITY / PTM_RATIO * std::sin(PLAYER_JUMPING_ANGLE * PI / 180))); 我的玩家跳。 另外当我改变矩形的形状是正常的(而不是传感器)形状,它的作品再次。 为什么? 以防万一这里是我的矩形传感器的参数: b2PolygonShape boxShape; boxShape.SetAsBox(width * 0.5/2/PTM_RATIO, height * 0.2/2/PTM_RATIO, b2Vec2(0, -height * 0.4 /PTM_RATIO), 0); b2FixtureDef boxFixtureDef; boxFixtureDef.friction […]

在Box2D平台游戏中,在“陡坡”上“跑步”

我见过很多页面谈论如何在Box2D上模拟一个平台游戏,特别是关于人们不想滑下斜坡的方法。 那么,我的问题是不同的,我很惊讶,我不能find关于它的职位/解决scheme。 当我有一个非常陡峭的斜坡,我遇到了这个问题。 这是发生了什么事情: 作为一个普通的平台英雄夹具的方形,因为在Box2D平台游戏中,运动基于施加冲动或设置速度,当我“移动”这样一个斜坡时,会发生什么情况,就像im推动它一样,从而产生垂直力所以正方形向上移动(特别是因为摩擦为0,以避免“粘在墙上”的东西)。 我已经解决了Box2D的大部分非平台熟练的问题。 这个似乎难以解决。 那么,如何避免我的物体在被推向斜坡时爬上一个陡峭的斜坡,而是因为它太陡而不能爬升而滑下来呢?

Box2D平台游戏:为什么水平移动停止跳跃?

我正在写我的sBox2D游戏角色的移动代码,但是我的跳跃实现失败: 当我按下Jump键时,字符跳转OK。 但是,当我同时按下跳转键和另一个键(如左箭头键)时,它会阻止跳转的发生。 我正在使用applyForceToCenter和setLinearVelocity移动字符。 问题是什么? 这是我如何绑定键触发移动: // press W key (aka Up key or BTNup) if (RHInput.isDown(RHInput.BTNup)) { if(rhcl.isPlayerOnGround()) { toniBody.applyForceToCenter(0, 100, true ); System.out.println("Toni jumps"); } } // press A key (aka Left key or BTNleft) if (RHInput.isDown(RHInput.BTNleft)) { if(rhcl.isPlayerOnGround()) { toniBody.setLinearVelocity(-5, 0); System.out.println("Toni walks left"); } else { toniBody.setLinearVelocity(-1, 0); } }

减lessBox2D中dynamic物体的弹性

在我的2D平台游戏中,我的玩家角色使用Box2Ddynamic主体进行建模。 我认为有一件事情是,即使所使用的夹具恢复为零,玩家在倾斜角度时也会popup静止的几何graphics,有点像塑料盒,但肯定不会像身体那样。 除了密度和恢复原理,Box2D并没有让我调整一些东西。 我注意到玩密度对于玩家如何移动基本上没有影响,我认为这也是奇怪的。 有什么现实的价值范围,你会建议? 现在对我来说,这一切都是一场试验和错误。

我如何渲染JBox2D ParticleGroup?

我想使用OpenGL从JBox2d渲染一个ParticleGroup 。 我已经设法定义了一个粒子组区域,但是我不确定如何绘制单个粒子。 以下是我如何创建ParticleGroup : m_world.setParticleRadius(0.15f); m_world.setParticleDamping(0.2f); PolygonShape shape = new PolygonShape(); shape.setAsBox(8, 10, new Vec2(-12, 10.1f), 0); ParticleGroupDef pd = new ParticleGroupDef(); pd.shape = shape; m_world.createParticleGroup(pd); 这是我如何画一个正常的Square (我不知道如何适用于粒子群): public void draw(GLAutoDrawable gLDrawable, Vec3 position, float angle){ gLDrawable.getGL().getGL2().glEnable(GL.GL_BLEND); gLDrawable.getGL().getGL2().glEnable(GL.GL_TEXTURE_2D); gLDrawable.getGL().getGL2().glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); gLDrawable.getGL().getGL2().glBindTexture(GL2.GL_TEXTURE_2D, TextureFactory.getTextureIndex(TextureCollection.valueOf(getTextureSelection()))); gLDrawable.getGL().getGL2().glPushMatrix(); gLDrawable.getGL().getGL2().glTranslatef(position.x * getP2M(), position.y * getP2M(), position.z); gLDrawable.getGL().getGL2().glRotated(Math.toDegrees(angle), 0, 0, 1); […]