2014-04-13 1 views
0

같은 배우 (Box2D의) 많은 시간을, 그래서 저를 도와주세요 :(Libgdx : 나는이 libgdx와 초보자 그리고 난 배우와 몸을 연결하는 방법을 답을 찾고 몸

을 내가 코드를 다음 있습니다 :

/// CLASS ACTOR 
public class MyActor extends Actor 
    { 
     Texture texture; 
     float actorX = 0, actorY = 0; 
     public boolean clicked = false; 
     public String id; 

     public MyActor(float x, float y, String id, String tekstura) 
     { 
      this.texture = new Texture(Gdx.files.internal(tekstura)); 
      this.id = id; 
      actorX = x; 
      actorY = y; 

      setBounds(actorX, actorY, texture.getWidth(), texture.getHeight()); 
      addListener(new InputListener() 
      { 
       public boolean touchDown(InputEvent event, float x, float y, 
         int pointer, int button) 
       { 
        MyActor co = ((MyActor) event.getTarget()); 
        co.clicked = true; 
        System.out.println(co.id); 
        co.remove(); 
        return true; 
       } 
      }); 
     } 


     @Override 
     public void draw(SpriteBatch batch, float alpha) 
     { 
      batch.draw(texture, actorX, actorY); 
     } 


    } 

/*.................... 
....................... 
........................ 
..........................*/ 
//CREATING SIMPLE OBJECT 

     MyActor samolot1 = new MyActor(100, 300, "samolot1", "data/jet.png"); 
     samolot1.setTouchable(Touchable.enabled); 
     stage.addActor(samolot1); 


     // //////////////// WORLD ///////////////////////////////////////////// 

     // 1 
     BodyDef bodydef_mojapostac = new BodyDef(); 
     bodydef_mojapostac.type = BodyType.DynamicBody; 
     bodydef_mojapostac.position.set(400, 100); 

     CircleShape shape_mojapostac = new CircleShape(); 
     shape_mojapostac.setRadius(30); 

     FixtureDef fixturedef_mojapostac = new FixtureDef(); 
     fixturedef_mojapostac.density = 0.1f; 
     fixturedef_mojapostac.friction = 0.8f; 
     fixturedef_mojapostac.restitution = 0.7f; 
     fixturedef_mojapostac.shape = shape_mojapostac; 

     Body BodyMojaPostac = world.createBody(bodydef_mojapostac); 
     BodyMojaPostac.createFixture(fixturedef_mojapostac); 


     BodyMojaPostac.setUserData(samolot1); 

...... 
batch.begin(); 
     world.getBodies(tmpBodies); 
     for (Body body : tmpBodies) 
      if (body.getUserData() != null) 
      { 
       System.out.println(body.getUserData()); 
       MyActor dupa = (MyActor) body.getUserData(); 
       batch.draw(dupa.texture, dupa.actorX, dupa.actorY); 
      } 
     batch.end(); 
..... 

나는 스프라이트와 함께 몸을 연결할 수 있습니다하지만 난 방법을 배우 :(

+0

다음 페이지를보고 싶을 수도 있습니다. https://gist.github.com/nooone/8363982 – noone

답변

-1

와 몰라() 렌더링 나는이처럼 사용

public class PhysicsActor extends Image { 
private Body body; 
private Fixture fixture; 

public PhysicsActor(World world, BodyDef bodyDef, FixtureDef fixtureDef, TextureRegion textureRegion) { 
    super(textureRegion); 

    body = world.createBody(bodyDef); 
    setFixture(getBody().createFixture(fixtureDef)); 
} 

@Override 
public void draw(Batch batch, float parentAlpha) { 
    super.draw(batch, parentAlpha); 
} 

public Body getBody() { 
    return body; 
} 

public Fixture getFixture() { 
    return fixture; 
} 

:뿐만 아니라,이 조합에 문제가 후에 내가 내 솔루션을 공유하고 싶습니다

bodyDef = new BodyDef(); 
bodyDef.type = BodyType.DynamicBody; 
bodyDef.position.set(Toolkit.Screen2World(x), Toolkit.Screen2World(y)); 

pShape = new PolygonShape(); 
pShape.setAsBox(Toolkit.Screen2World(width/2), Toolkit.Screen2World(height/2)); //In Toolkit I have my methods to scale the world 

fixtureDef = new FixtureDef(); 
fixtureDef.shape = pShape; 
//Set some more attributes i.e. density 

//Add the PhysicsActor 
PhysicsActor leftBar = new PhysicsActor(world, bodyDef, fixtureDef, new TextureRegion(Resources.barLeftTexture, 0, 0, width, height)); 
leftUpperBar.setSize(width, height); 
this.addActor(leftUpperBar); 

만 내 경우에는 (수동 너비와 높이를 설정해야합니다 내 텍스처의 해상도 사용).

는 Resources.barLeftTexture :

public static Texture barLeftTexture; 

barLeftTexture = new Texture(Gdx.files.internal("data/barLeft.png")); 

나는 어쩌면이 질문을 통해 보았 지 누군가를하는 데 도움이 귀하의 질문은 귀하 (OP)하지만 대한 오래된 될 수 있습니다 것으로 나타났습니다.

+1

귀하의 솔루션에서 귀하의 신체 위치를 GameActor의 위치로 마이그레이션하는 방법을 보여 주거나 설명하는 곳이 없습니다. 또한 PhysicsActor 구성 자에서 getBody 호출이 필요하지 않습니다. 거기에 시체가 있습니다. – RichieHH