box2D中哪个方向被认为是0度?是北,南,东,西?然后顺时针或逆时针增加角度?
我已经阅读了手册,似乎没有在任何地方提到这一点.
我真的坚持这个我可以成功地发现碰撞,但我不能让两个身体参与碰撞.
这是我的ContactListener
world.setContactListener(listener);
listener = new ContactListener() {
@Override
public void preSolve(Contact contact, Manifold oldManifold) {
}
@Override
public void postSolve(Contact contact, ContactImpulse impulse) {
}
//called when two fixtures cease to touch
@Override
public void endContact(Contact contact) {
Fixture fixtureA = contact.getFixtureA();
Fixture fixtureB = contact.getFixtureB();
Gdx.app.log("beginContact", "between" + fixtureA.toString() + "and" + fixtureB.toString());
}
//called when two fixtures begin to touch
@Override
public void beginContact(Contact contact) {
Fixture fixtureA = contact.getFixtureA();
Fixture fixtureB = contact.getFixtureB();
Gdx.app.log("beginContact", "between" …Run Code Online (Sandbox Code Playgroud) 我在哪里可以找到夹具预设,可用于刚体物理引擎,如Box2D来模拟不同材料的行为?
我正在寻找常见材料的密度,摩擦力和恢复原状值,例如:
除了设置这些值以实现真实结果的试验和错误之外,还有其他方法吗?
我正在尝试创建一个可以将JBox2d世界的对象绘制到画布上的类.
在更新时我打电话给
render.draw(canvas,world);
Run Code Online (Sandbox Code Playgroud)
它将世界和画布传递给绘图类,它将循环遍历世界的对象并将它们绘制到画布中.
public void draw(Canvas canvas, World world)
{
canvas.drawColor(0xFF6699FF);
for ( Body b = world.getBodyList(); b!=null; b.getNext() )
{
Log.e("xy", String.valueOf( b.getPosition().x )+" "+String.valueOf( b.getPosition().y ) );
}
}
Run Code Online (Sandbox Code Playgroud)
然而它似乎进入一个无限循环,后退按钮不起作用,然后它说"没有响应"并提供强制关闭.
在这种情况下,任何想法是什么是在身体中循环的正确方法?
谢谢!
当尝试使用Box2D编写游戏时,我遇到了Box2D的问题.我填充了纹理和精灵的长度的像素数,以在它周围创建一个框.一切都在正确的地方,但由于某种原因一切都很慢.通过在互联网上查看我发现,如果你没有将像素转换为米,box2d可能会将形状作为非常大的对象处理.这似乎是一切运动缓慢的合理原因.
我在这个网站上发现了类似的问题,但答案似乎没有帮助.在大多数情况下,解决方案是使用缩放因子制作将像素数转换为米的方法.我尝试了这一点,但一切都放错了地方并且尺寸错误.这对我来说似乎是合乎逻辑的,因为数字改变但具有相同的含义.
我想知道是否有办法让像素意味着更少的米,所以一切都应该在相同(像素)大小的同一个地方,但意味着更少的米.如果你有不同的方式,你认为可能有所帮助,我也想听听它..
这是我用来创建相机的代码
width = Gdx.graphics.getWidth() / 5;
height = Gdx.graphics.getHeight() / 5;
camera = new OrthographicCamera(width, height);
camera.setToOrtho(false, 1628, 440);
camera.update();
Run Code Online (Sandbox Code Playgroud)
这是我用来创建对象的方法:
public void Create(float X, float Y, float Width, float Height, float density, float friction, float restitution, World world){
//Method to create an item
width = Width;
height = Height;
polygonDef = new BodyDef();
polygonDef.type = BodyType.DynamicBody;
polygonDef.position.set(X + (Width / 2f), Y + (Height / 2f));
polygonBody = world.createBody(polygonDef);
polygonShape = new PolygonShape();
polygonShape.setAsBox(Width / 2f, …Run Code Online (Sandbox Code Playgroud) 我是box2d和libgdx游戏开发框架的新手.
我创造了一个世界和一个圆形.
我陷入了重力困境.我在libgdx box2d中创建的Circle并没有受到重力的影响.请帮我解决这个问题.
public void render(float delta) {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
box2dDebugRenderer.render(world, orthographicCamera.projection);
world.step(TIME_STEMP, VELOCITY_ITERAIONS, POSITION_ITERATION);
System.out.println(b.getPosition().y);
}
@Override
public void resize(int width, int height) {
orthographicCamera.setToOrtho(false, width/10, height/10);
orthographicCamera.update();
}
@Override
public void show() {
world = new World(new Vector2(0, -9.81f), true);
box2dDebugRenderer = new Box2DDebugRenderer();
orthographicCamera = new OrthographicCamera();
BodyDef balldef = new BodyDef();
balldef.type = BodyType.DynamicBody;
balldef.position.set(0, 1);
CircleShape ballshape = new CircleShape();
ballshape.setRadius(1f);
FixtureDef ballfixture = new FixtureDef();
ballfixture.density = 1000f;
ballfixture.friction = .3f;
ballfixture.restitution = .7f; …Run Code Online (Sandbox Code Playgroud) 我有一个Arraylist,其中的对象包含一个对象的位置和旋转,我想使用Graphics2D在屏幕上绘制.
public void render(Graphics g1) {
Graphics2D g = (Graphics2D) g1;
g.setColor(Color.white);
for(PhysicObject object : entities) {
if (object.getBody().getType() == BodyType.DYNAMIC) {
Vec2 position = object.getBody().getPosition().mul(30);
g.translate(position.x, position.y);
g.rotate(object.getBody().getAngle());
g.fillRect((int)-(object.width), (int)-(object.height), (int)(object.width*2), (int)(object.height*2));
}
}
}
Run Code Online (Sandbox Code Playgroud)
第一个对象始终旋转正确,但以下旋转第一个对象而不围绕自身.
希望有人可以帮助我,谢谢.