2016-06-30 2 views
0

Je suis en train de faire disparaître l'image puis fondu et cela fonctionne mais l'image de fond est également fondu, puis fondu Aussi lorsque j'applique l'action de rotation (qui est commenté) il tourne l'image une seule fois bien que je l'ai mis sur l'événement Retouche, tandis que le fondu entrant et sortant est appliqué à chaque toucher mais fondu appliqué sur l'image et le fond : ici où j'applique l'action dans cette classe:Libgdx actions à l'image est appliquée à des acteurs entiers

public class MainButtons { 
    public Viewport viewport; 
    public Stage stage; 
    public boolean centerPressed; 

    public Image fire; 
    public Image center; 
    public Sound flap; 

    public OrthographicCamera camera; 
    public static Table table; 


    //Constructor. 
    public MainButtons(SpriteBatch spriteBatch) { 
     camera = new OrthographicCamera(); 
     viewport = new StretchViewport(KidTele.V_WIDTH,KidTele.V_HIEGH,camera); 
     stage = new Stage(viewport, spriteBatch); 
     //InputMultiplexer this is why only input handling from controller 
     flap= Gdx.audio.newSound(Gdx.files.internal("one.mp3")); 
     Gdx.input.setInputProcessor(stage); 

     fire= new Image(new Texture("cars/fire.png")); 

     //buttonone.setSize(10, 5); 


     menuTable(); 
     defineCenter(); 

    } 
    public void defineCenter() 
    { 
     center=new Image(new Texture(Gdx.files.internal("0.png"))); 

     center.setBounds(viewport.getWorldWidth()/5f, viewport.getWorldHeight()/3f, viewport.getWorldWidth()/1.5f, viewport.getWorldHeight()/3f); 
     center.addListener(new InputListener() { 
      @Override 
      public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
       centerPressed = true; 
       return true; 
      } 

      @Override 
      public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
       //center.setOrigin(center.getWidth()/2,center.getHeight()/2); 
       //center.addAction(Actions.sequence(Actions.rotateTo(360, 2), Actions.fadeIn(1))); 
       center.addAction(Actions.sequence(Actions.fadeOut(1), Actions.fadeIn(1))); 
       centerPressed = false; 
      } 
     }); 
     //center.setVisible(false); 
     stage.addActor(center); 
    } 
    public void draw() { 
     stage.draw(); 
    } 
    public void resize(int width, int height) { 
     viewport.update(width, height); 
    } 
} 

ce qui est le code de l'écran:

public class PlayScreen implements Screen { 
    private KidTele game; 
    private OrthographicCamera gamecam; 
    private Viewport gameport; 
    private World world; 
    private Box2DDebugRenderer b2dr; 
    private MainButtons mainButtons; 
    private Texture background; 
    private Sound flap; 
    public PlayScreen(KidTele game) 
    { 
     this.game=game; 
     gamecam=new OrthographicCamera(); 
     gameport=new StretchViewport(KidTele.V_WIDTH,KidTele.V_HIEGH,gamecam); 
     //stage=new Stage(gameport,((KidTele) game).batch); 
     background=new Texture("background2.png"); 
     gamecam.position.set(gameport.getWorldWidth()/2f,gameport.getWorldHeight()/2f,0); 
     b2dr=new Box2DDebugRenderer(); 
     world=new World(new Vector2(0,0.8f),true); 
     flap= Gdx.audio.newSound(Gdx.files.internal("one.mp3")); 
     mainButtons=new MainButtons(game.batch); 
    } 
    @Override 
    public void show() { 

    } 
    public void handleinput(float dt) 
    { 

     if(Gdx.input.isKeyJustPressed(Input.Keys.BACK)) { 
      mainButtons.stopMusic(); 
      game.setScreen(new PlayScreen(game)); 
     } 

    } 
    public void update(float dt) 
    { 
     handleinput(dt); 
     world.step(1 /60f, 6, 2); 
     //player.update(dt); 

     gamecam.update(); 
    } 

    @Override 
    public void render(float delta) { 

     update(delta); 
     Gdx.gl.glClearColor(1, 1, 1, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     b2dr.render(world, gamecam.combined); 
     game.batch.setProjectionMatrix(gamecam.combined); 

     game.batch.begin(); 

     game.batch.draw(background, 0, 0, gameport.getWorldWidth(), gameport.getWorldHeight()); 
     game.batch.end(); 
     mainButtons.stage.act(); 
     mainButtons.stage.draw(); 
     mainButtons.draw(); 
    } 

    @Override 
    public void resize(int width, int height) { 
     gameport.update(width, height); 
     mainButtons.resize(width, height); 
    } 

Répondre

2

Après avoir appelé stage.draw(), le SpriteBatch peut avoir une couleur arbitraire. Dans votre cas, il est réglé avec un certain alpha partiel de faner un des acteurs. Pour corriger cela, assurez-vous d'appeler batch.setColor(1, 1, 1, 1) juste avant de dessiner l'arrière-plan, de sorte que vous pouvez garantir la couleur avec laquelle il sera dessiné.

L'image ne tourne qu'une seule fois car vous utilisez rotateTo et lui attribue la même valeur à chaque fois. Une fois qu'il tourne à 360 degrés, chaque fois que vous appelez rotateTo à nouveau, il sera déjà à 360 degrés, donc rien ne se passe. Dans votre cas, vous devez utiliser rotateBy à la place.

Par ailleurs, vous dessinez votre étape deux fois lorsque vous faites ceci:

mainButtons.stage.draw(); 
    mainButtons.draw(); 
+0

Merci beaucoup veryyyy @ Tenfour04, il fonctionne très bien –