2014-10-01 3 views
0

Я пытаюсь перемещать тело, применяя к нему силу. Но вместо того, чтобы двигаться в горизонтальном направлении и делать траекторию, он просто падает, как будто я не применял к нему силу. Вот код:Применение силы на корпусе box2d не работает

public class Box2dTest implements ApplicationListener 
{ 
    private OrthographicCamera camera; 
    World box2Dworld; 
    Box2DDebugRenderer debugRenderer; 
    private Body box2dBody; 
    Sprite ball_sprite; 
    SpriteBatch spriteBatch; 

    @Override 
    public void create() 
    { 
     camera = new OrthographicCamera(); 
     camera.setToOrtho(false); 

     box2Dworld = new com.badlogic.gdx.physics.box2d.World(new Vector2(0.0F, -10.0F), true); 
     new BoundryWall(this.box2Dworld, new PointF(0.0F, 0.0F), 800.0F, camera); 

     debugRenderer = new Box2DDebugRenderer(); 

     createDynamicBody(110f, 150f); 

     box2dBody.applyForce(new Vector2(30 * 1000, 0), box2dBody.getWorldCenter(), true); 

     Texture ball_in_hand_Texture = new Texture(Gdx.files.internal("test/ball_in_hand.png")); 
     ball_in_hand_Texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); 

     ball_sprite = new Sprite(ball_in_hand_Texture); 
     ball_sprite.setPosition(110f, 150f); 

     spriteBatch = new SpriteBatch(); 
    } 

    @Override 
    public void render() 
    { 
     Gdx.gl.glClearColor(0.5f, 0.5f, 0.5f, 1f); 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

     box2Dworld.step(1.0f/60.0f, 6, 2); 
     //box2Dworld.clearForces(); 

     camera.update(); 

     debugRenderer.render(box2Dworld, camera.combined); 

     spriteBatch.begin(); 

     spriteBatch.draw(ball_sprite, 30 * box2dBody.getPosition().x, 30 * box2dBody.getPosition().y); 

     spriteBatch.end(); 
    } 

    private void createDynamicBody(float x, float y) 
    { 
     // First we create a body definition 
     BodyDef bodyDef = new BodyDef(); 
     // We set our body to dynamic, for something like ground which doesn't move we would set it to StaticBody 
     bodyDef.type = BodyType.DynamicBody; 
     bodyDef.bullet = true; 
     // Set our body's starting position in the world 
//  bodyDef.position.set(x/60.0f, y/60.0f); 

     //bodyDef.position.set(x/30.0f, y/30.0f); 

     bodyDef.position.set(x, y); 

     // Create our body in the world using our body definition 
     box2dBody = this.box2Dworld.createBody(bodyDef); 

     // Create a circle shape and set its radius to 6 
     CircleShape circle = new CircleShape(); 
     circle.setRadius(10f); 

     // Create a fixture definition to apply our shape to 
     FixtureDef fixtureDef = new FixtureDef(); 
     fixtureDef.shape = circle; 
     fixtureDef.density = 0.5f; 
     fixtureDef.friction = 0.4f; 
     fixtureDef.restitution = 0.6f; // Make it bounce a little bit 

     // Create our fixture and attach it to the body 
     Fixture fixture = box2dBody.createFixture(fixtureDef); 

     // Remember to dispose of any shapes after you're done with them! 
     // BodyDef and FixtureDef don't need disposing, but shapes do. 
     circle.dispose(); 
    } 
} 

Пожалуйста, помогите мне. Я пытаюсь решить эту проблему за последние 3 дня, но безрезультатно. Заранее спасибо.

+0

Сила обычно применяется непрерывно во многих временных шагах, а не только в вашем коде. Возможно, вы могли бы попробовать ApplyLinearImpulse или SetLinearVelocity. – iforce2d

ответ

2

Я думаю, вы создали мир очень большого размера, в котором применение силы этого значения не будет иметь никакого эффекта. Фактически применение силы любой ценности не будет иметь никакого эффекта, поскольку мир box2d ограничен более низким значением.

Я не работал на Box2d в течение очень долгого времени, но я столкнулся с той же проблемой. Попробуйте небольшой мир около 12x20 и соответственно обработайте спрайты. Затем попробуйте применить силу, она определенно будет работать.

+0

Не могли бы вы рассказать мне, как создать мир небольшого размера, пожалуйста? – user1726619

+0

Здесь вы создаете круг с радиусом 10 радиуса ... уменьшите его до .2f и соответствующим образом отредактируйте спрайт. Pixel to meter stuff - это линия, которую вы должны искать ... Также см. Это. может помочь вам -> http://stackoverflow.com/questions/14208797/box2d-libgdx-a-bit-confused-about-the-pixels-to-meters-stuff –

Смежные вопросы