2016-06-01 19 views
0

すでにテクスチャ領域の描画が完了していますが、テクスチャ領域を反転しようとしているときに機能していないため、複数のフレームを描画しようとしても機能しません。私は、getフレームメソッド内体の速度をチェックしてみましたが、私はこのコードを使用する場合、それは私に0を与える:Libgdxテクスチャ領域が反転していません

Gdx.app.log(String.valueOf(b2body.getLinearVelocity().x),"hi"); 

は誰も私を助けることができます。これはコードです:TextureRegion.flip()を使用して

public class Collector extends Sprite { 
    public enum State{STANDING,RUNNING,DEAD}; 
    public State currentState; 
    public State previousState; 
    public World world; 
    public Body b2body; 
    private TextureRegion collectorStand; 
    private Animation collectorRun; 
    private float stateTimer; 
    private boolean runningRight; 

    public Collector(World world,PlayScreen screen) 
    { 
     super(screen.getAtlas().findRegion("myboy1")); 
     this.world=world; 
     currentState=State.STANDING; 
     previousState=State.STANDING; 
     stateTimer=0; 
     runningRight=true; 
     Array<TextureRegion> frames=new Array<TextureRegion>(); 
     for(int i=0;i<3;i++) 
     frames.add(new TextureRegion(getTexture(),i*90,122,90,300)); 
     //frames.add(new TextureRegion(getTexture(),90,122,110,300)); 
     //frames.add(new TextureRegion(getTexture(),200,122,110,300)); 

     collectorRun=new Animation(0.1f,frames); 
     frames.clear(); 


     collectorStand=new TextureRegion(getTexture(), 0, 122, 89, 300); 
     //collectorStand=new TextureRegion(getTexture(),90,122,110,300); 
     //collectorStand=new TextureRegion(getTexture(),200,122,110,300); 
     defineCollector(); 
     setBounds(0,0,50/Fruits.PPM,100/Fruits.PPM);//here we can change the size of our Animation 


     setRegion(collectorStand); 
    } 
    public TextureRegion myregion(float dt) 
    { 
     TextureRegion region; 
     region=collectorStand; 

     Gdx.app.log(String.valueOf(b2body.getLinearVelocity().x),"hi"); 
     if(b2body.getLinearVelocity().x<0) 
     { 
      region.flip(true,false); 
     } 

     return region; 
    } 
    public void update(float dt) 
    { 
     setPosition(b2body.getPosition().x - getWidth()/2, b2body.getPosition().y - getHeight()/2.8f); 
     //setRegion(myregion(dt)); 
     setRegion(getFrame(dt)); 
    } 
    public TextureRegion getFrame(float dt)// return the appropriate frames for the sprite to be drawn 
    { 
     currentState=getState(); 
     TextureRegion region; 
     switch (currentState) 
     { 
      case RUNNING: 
       region=collectorRun.getKeyFrame(stateTimer,true); 
       break; 
      case STANDING: 
      default: 
       region=collectorStand; 
       break; 
     } 
     Gdx.app.log(String.valueOf(b2body.getLinearVelocity().x),"hi"); 
     if((b2body.getLinearVelocity().x<0 || !runningRight)&& !region.isFlipX()) 
     { 
      region.flip(true,false); 
      runningRight=false; 
     } 
     else if((b2body.getLinearVelocity().x>0 || runningRight)&& region.isFlipX()) 
     { 
      region.flip(true,false); 
      runningRight=true; 
     } 
     stateTimer=currentState==previousState?stateTimer+dt:0; 
     previousState=currentState; 
     return region; 
    } 
    public State getState() 
    { 
     if(b2body.getLinearVelocity().x!=0) 
      return State.RUNNING; 
     else 
      return State.STANDING; 
    } 
    public void defineCollector() 
    { 
     BodyDef bdef=new BodyDef(); 
     bdef.position.set(72/Fruits.PPM,32/Fruits.PPM); 
     bdef.type=BodyDef.BodyType.DynamicBody; 
     b2body=world.createBody(bdef); 
     FixtureDef fdef=new FixtureDef(); 
     //PolygonShape shape=new PolygonShape(); 
     CircleShape shape=new CircleShape(); 
     shape.setRadius(20/Fruits.PPM); 
     fdef.shape=shape; 
     b2body.createFixture(fdef); 
    } 
} 
+0

あなたは一度だけそれを反転されていますか?テクスチャ領域は、その領域を使用しているすべてのオブジェクトから失われるテクスチャ上の領域です。 – Madmenyo

答えて

0

フリッピングは、画像の一定の反転のための良い方法ではありません。これを行う必要があるのは、イメージを読み込むときだけです。イメージデータを実際には反転して描画するのではなく、実際にはイメージデータを変更するため、計算コストが高いため、

batch.draw()を呼び出すときは、代わりに画像を反転する必要があります。より多くのパラメータでバッチコールを使用する方法については、こちらを参照してください:libgdx: Rotate a texture when drawing it with spritebatch私は実際に質問のポスターです:P

関連する問題