2014-07-26 3 views
0

Я использую Java, libgdx и Box2DКак изменить размер после того, как он был создан

В главном классе я создал плеер. Я хочу изменить shape.setAsBox на 100 в классе игроков. Таким образом, я хочу изменить shape.setAsBox после его создания. Я считаю, что только способ сделать это - удалить крепление и создать новый со 100 размерами. Как я могу это сделать.

public class main{ 
    ... 
    public main(){ 
    //create player 
    BodyDef bdef = new BodyDef(); 
    Body body; 
    FixtureDef fdef = new FixtureDef(); 
    PolygonShape shape = new PolygonShape(); 

    /***Body - Player ***/ 
    bdef.type = BodyType.DynamicBody; 
    bdef.position.set(50/PPM, 50/PPM); 
    bdef.linearVelocity.set(1.5f, 0); 
    body = world.createBody(bdef); 

    /*** 1st fixture ***/ 
    shape.setAsBox(50/ PPM, 50/PPM); 
    fdef.shape = shape; 
    fdef.filter.categoryBits = Constants.BIT_PLAYER; 
    fdef.filter.maskBits = Constants.BIT_GROUND; 
    body.createFixture(fdef).setUserData("player"); 

    player = new Player(body); 
    } 

    .... 

    public void update(float dt) { 
     playerObj.update(dt); 
     ... 
    } 
} 

// playyer класс

public class player{ 
     public player(Body body){ 
      super(body); 
     } 

     .... 
     public void update(){ 
      //get player x position 
      currentX = this.getBody().getPosition().x; 

      // how can I delete old fixture and recreate a new one? 
      // which will has shape.setAsBox = 100. 
     } 
} 

ответ

3

Лучшее (возможно, единственный) способ сделать это на самом деле уничтожить всю Крепеж и переопределить его. Так как ваш игрок имеет только один прибор, либо вы следить за ним, чтобы удалить его или просто сделать это:

this.getBody().destroyFixture(this.getBody().getFixtureList().first()); 

Тогда просто воссоздать простую форму в уже существующий орган:

PolygonShape shape; 
    FixtureDef fdef; 

    // Create box shape 
    shape = new PolygonShape(); 
    shape.setAsBox(100/PPM, 100/PPM); 

    // Create FixtureDef for player collision box 
    fdef = new FixtureDef(); 
    fdef.shape = shape; 
    fdef.filter.categoryBits = Constants.BIT_PLAYER; 
    fdef.filter.maskBits = Constants.BIT_GROUND; 

    // Create player collision box fixture 
    this.getBody().createFixture(fdef).setUserData("player"); 
    shape.dispose(); 
Смежные вопросы