2013-04-01 4 views
3

나는 libgdx에서 box2d를 사용할 수있었습니다. 그러나 주어진 예제 코드 here은 동적 본문 전용입니다. 나는 그것을 사용하려고했지만 멋지게 작동하지만 KinematicBody를 Dynamic로 변경하면 코드가 작동하지 않습니다. 여기에 내 코드운동기구에서의 충돌 감지 LIBGDX

@Override 
     public void create() { 
     // Create our body definition 
      BodyDef groundBodyDef =new BodyDef(); 
      groundBodyDef.type = BodyDef.BodyType.StaticBody; 
    // Set its world position 
      groundBodyDef.position.set(new Vector2(0, 10)); 

    // Create a body from the defintion and add it to the world 
      groundBody = world.createBody(groundBodyDef); 

    // Create a polygon shape 
      PolygonShape groundBox = new PolygonShape(); 
    // Set the polygon shape as a box which is twice the size of our view port and 20 high 
    // (setAsBox takes half-width and half-height as arguments) 
      groundBox.setAsBox(camera.viewportWidth, 10.0f); 
    // Create a fixture from our polygon shape and add it to our ground body 
      groundBody.createFixture(groundBox, 0.0f); 
    // Clean up after ourselves 
      groundBox.dispose(); 

      //endregion 


      BodyDef bodyDef = new BodyDef(); 
    // We set our body to dynamic, for something like ground which doesnt move we would set it to StaticBody 
      bodyDef.type = BodyDef.BodyType.KinematicBody; 
    // Set our body's starting position in the world 
      bodyDef.position.set(bolaX, bolaY); 

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

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


    // Create a fixture definition to apply our shape to 
      FixtureDef fixtureDef = new FixtureDef(); 
      fixtureDef.shape = circle; 
      fixtureDef.density = 20; 

      fixtureDef.friction = 0; 
      fixtureDef.restitution = 0.6f; // Make it bounce a little bit 

    // Create our fixture and attach it to the body 
      Fixture fixture = body.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(); 

      Gdx.input.setInputProcessor(this); 
    } 



    @Override 
     public void render() { 


      world.step(1/60f, 6, 2); 



      Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
      camera.update(); 



      //batch.getProjectionMatrix().set(camera.combined); 
      batch.begin(); 
      textureBodies = body.getPosition(); 
      float angle = MathUtils.radiansToDegrees * body.getAngle(); 
      //batch.draw(ball,textureBodies.x ,textureBodies.y ); 
      batch.draw(ball, textureBodies.x - (bola.getWidth()/2) , textureBodies.y - (bola.getHeight()/2) , // the bottom left corner of the box, unrotated 
        1f, 1f, // the rotation center relative to the bottom left corner of the box 
        bola.getWidth(), bola.getHeight(), // the width and height of the box 
        1, 1, // the scale on the x- and y-axis 
        angle); 
      batch.end(); 

      debugRenderer.render(world, camera.combined); 
       if(Gdx.input.isKeyPressed(Input.Keys.DPAD_UP)){ 
        Gdx.app.log("Input Test", "key down: " + "aw ---- x" + body.getPosition().x + " y " + body.getPosition().y); 
        vel += 1; 
        //Gdx.app.log("vel","" + vel); 
        body.setLinearVelocity(0f,vel); 
       } else{ 
        vel -= 1; 
        // Gdx.app.log("vel","" + body.getPosition().y); 
        body.setLinearVelocity(0f,vel); 
       } 

    int numContacts = world.getContactCount(); 
     if (numContacts > 0) { 
      Gdx.app.log("contact", "start of contact list"); 
      for (Contact contact : world.getContactList()) { 
       Fixture fixtureA = contact.getFixtureA(); 
       Fixture fixtureB = contact.getFixtureB(); 
       Gdx.app.log("contact", "between " + fixtureA.toString() + " and " + fixtureB.toString()); 
      } 
      Gdx.app.log("contact", "end of contact list"); 
     } 


     } 

입니다 그리고 여기 이미지입니다 .. 당신은 왼쪽에서 볼 수있는 것은 DynamicBody이고 오른쪽은 KinematicBody입니다. 연락처를 얻기

enter image description here

동적 몸에하지만 운동 학적 몸에서 작동합니다. 운동기구에서 충돌을 감지하는 방법을 말할 수 있습니까?

답변

7

키네틱 바디가 정적 바디와 충돌하지 않습니다. 도움이 될 수 있습니다. 단지 속도가 아닌 고정기구가 힘에 의해 영향을 받는다 O 변위가 있지만 힘에 의해 영향

+2

있는 반면가 충돌시에 충격을 발생 즉 http://box2d.org/ forum/viewtopic.php? f = 3 & t = 5360 – Pranav008

+0

그래서 어떤 방향으로 움직이는 물체를 사용할 때 운동 학적 사용이 잘못 되었습니까? 기구학에 충돌이 없기 때문에? – thenewbie

+0

글쎄, 나는 운동기구에 충돌이 없다고 말했다. 키네마 틱 몸체가 역동 체와 충돌합니다. 동적 또는 운동 학적 또는 정적 인 신체의 사용은 게임의 요구 사항에 달려 있습니다. 일반적으로 몸이 움직이는 경우 동적 인 상태로 유지하는 것이 좋습니다. – Pranav008

1

좌표계 기관 동적 기관 모두