Articles of 正文

在发生碰撞之前移除box2d对象

我有一个字符和项目之间的碰撞检测问题,都创建为box2d对象。 我想要做的是在人物击中物品之前删除物品或从碰撞方法中删除物品并弹开。 因此,我想要检测物品和角色何时相撞以获得物品效果。 目前来源如下: mWorld.setContactListener( new ContactListener() { @Override public void endContact(Contact contact) { } @Override public void beginContact(Contact contact) { Body bodyA = contact.getFixtureA().getBody() ; Body bodyB = contact.getFixtureB().getBody() ; Box2DUserData dataA = (Box2DUserData) bodyA.getUserData() ; Box2DUserData dataB = (Box2DUserData) bodyB.getUserData() ; if( dataA.id == Box2DUserData.ID_ITEM ) { //mWorld.destroyBody(bodyA); //bodyA.setTransform(new Vector2( 0, 0 ), […]

需要通过焊接接头连接2个物体,但不能在质量中心连接

我已经通过焊缝成功地连接了两个物体,但是我的问题是我想要join不在质心的物体的角落。 有没有办法做到这一点? 上面的图像包含3个要通过焊缝连接的多边形体。 随时问更多的信息。 任何帮助将是可观的。

libgdx精灵相对于身体的位置

如果这是重复的道歉,因为在过去的几天里我找不到另外的讨论。 问题:我正在使用libgdx和box2d,而且我现在正在每次渲染调用时将精灵的位置更新到主体的当前位置。 使用debugRenderer来查看尸体,我发现在身体的移动/位置和正在移动的精灵之间存在相当明显的滞后。 问:这是否正常,可能提前执行碰撞? 如果不是,我应该以不同的方式操纵/关联这些头寸吗? 提前致谢! [解决scheme]这是我的编码错误。 在下面的一个好回复指出,我正在更新精灵相对于身体的位置,然后步进物理。 因此绝对不要将精灵设置到身体的CURRENT位置。 谢谢!

管理碰撞过滤的问题

我有我的角色夹具和身体(是一个坦克),所以当我按下屏幕时,它会抛出一个火箭(也有一个身体和一个夹具),玩家可以控制触摸屏幕。 我的游戏也有硬币,从箱子里掉落,当我摧毁它们时,我不希望火箭与坦克相撞,因为玩家可以在任何地方(甚至是坦克)引导它,只有当它被破坏时触及敌人。 这里的问题是火箭可以触碰一枚硬币并移动它,但是这不会发生。 我读过这个可以使用碰撞过滤来解决,但是我不太了解这个概念。 我希望坦克与硬币碰撞,但不要与火箭碰撞。

施加焊接接头后的物体移动

我有两个矩形的身体。 我已经成功地将Weldjoint应用于这些机构。 我想通过应用线性冲动来移动这个连接的体。 焊接后,这两个物体变成单体吗? 我如何对联合身体施加力量/冲动? 我用LibGDX使用Box2D。 我试过这个: polygon1.applyLinearImpulse(new Vector2(-5, 0), polygon1.getWorldCenter(), true); 我认为如果我移动polygon1那么polygon2也会因为我的焊缝而移动,但是它不能正常工作。 为什么焊接后不一起移动? 下面是我的代码。 package com.test.box2d; import com.badlogic.gdx.Game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.BodyDef; import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; import com.badlogic.gdx.physics.box2d.ChainShape; import com.badlogic.gdx.physics.box2d.FixtureDef; import com.badlogic.gdx.physics.box2d.PolygonShape; import com.badlogic.gdx.physics.box2d.World; import com.badlogic.gdx.physics.box2d.joints.WeldJointDef; public class WeldJointTest extends Game{ World […]

Box2D / Farseer – 移动静态物体上的灯具

我正在尝试创建一个灯具池,以减less内存消耗。 我的问题是,当我试图返回一个夹具池,并重新分配其在父体的位置,一旦重新定位夹具不再提供任何碰撞响应与其他世界对象。 看来如果你想在一个静态物体上移动一个Fixture,它需要被销毁并重新创建。 这个方法不允许我使用我的Pool。 有谁知道是否有可能移动夹具在静态物体上? 我不想移动身体,但附加的附件。

在LibGDX中着色box2d体

我想在LibGDX中为box2d的多边形着色。 find下面的有用的类。 http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/glutils/ShapeRenderer.html 但是,它并没有将身体着色成彩色的形状。 我想要有颜色的物体,像重力,恢复原状等所有的性质。简而言之,我想制作有色的球和表面。我不想把精灵附在身体上。 只需要在身体中填充颜色。 需要一些指导?

在libGDX中使用Box2D保持自由落体的速度

我想用LibGDX来保持自由下落的Box2D机身的速度。 我想垂直速度与水平的增加。 我施加了一个线性脉冲,速度实际上是这样增加的: fruitBody.applyLinearImpulse(0, -800, fruitBody.getLocalCenter().x, fruitBody.getLocalCenter().y, true); 我认为这是一个糟糕的做法,因为速度只有一点点增加,我的冲动量达到了800单位。 下面是我玩游戏屏幕类的渲染function: public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // camera.update(); // batch.setProjectionMatrix(camera.combined); batch.begin(); backgroundSprite.draw(batch); grassSprite.draw(batch); // bucketSprite.draw(batch); Iterator<Body> bodies = world.getBodies(); while(bodies.hasNext()){ Body body = bodies.next(); if(body.getUserData() != null){ String spriteName = (String) body.getUserData(); Sprite sprite = (Sprite) userDataMap.get(spriteName); if(spriteName.equals("bucket")) sprite.setPosition(body.getPosition().x + 345, […]

libgdx解释步骤为初学者创建和使用图像作为box2d正文

我基本上是从电晕背景和新的LibGdx,熟悉scene2D的舞台和演员。 现在,除了使用scene2D中的actor之外,还想在游戏中使用box2d中的物理体。 但我需要在游戏中使用图像作为身体…不是形状.. 任何人都请解释我使用图像作为一个身体的步骤。 谢谢..

使用World.destroyBody(Body body)时发生错误

在Android应用程序中使用libgdx,当我使用World.destroyBody(Body body)方法时,偶尔应用程序突然closures。 在我摧毁尸体之前,是否需要对身体碰撞或Box2DDebugRenderer进行一些设置? 以下是我用来销毁尸体的来源。 private void deleteUnusedObject( ) { for( Iterator<Body> iter = mWorld.getBodies() ; iter.hasNext() ; ){ Body body = iter.next( ) ; if( body.getUserData( ) != null ) { Box2DUserData data = (Box2DUserData) body.getUserData( ) ; if( ! data.getActFlag() ) { if( body != null ) { mWorld.destroyBody( body ) ; } } […]