2016-06-30 2 views
0

이미지가 페이드 아웃되고 페이드 인되도록하려고하지만 배경 이미지도 페이드 아웃 한 다음 페이드 아웃합니다. 회전 동작을 적용 할 때도 댓글을 달았습니다.) 페이드 인/아웃은 각 터치마다 적용되지만 페이딩은 이미지와 배경에 적용됩니다. : 여기서이 클래스의 작업을 적용합니다 :이미지에 대한 Libgdx 동작이 전체 액터에 적용됩니다.

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); 
    } 
} 

이 화면의 코드입니다 :

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); 
    } 
,

답변

2

stage.draw()을 호출 한 후 SpriteBatch를 임의의 색으로 설정할 수 있습니다. 귀하의 경우에는 배우 중 일부가 희미 해지는 부분 알파가 설정되어 있습니다. 이 문제를 해결하려면 배경을 그릴 직전에 batch.setColor(1, 1, 1, 1)으로 전화하여 그려지는 색을 보장 할 수 있습니다.

rotateTo을 사용하고 매번 같은 값을 지정하기 때문에 이미지가 한 번만 돌아갑니다. 360도 회전하면 rotateTo에 다시 전화 할 때마다 이미 360 도가되므로 아무 일도 일어나지 않습니다. 귀하의 경우에는 대신 rotateBy을 사용해야합니다. 이 수행 할 때 그런데

, 당신은 두 번 단계를 그리는 :

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

가 Tenfour04 @ 당신에게 veryyyy 많은 감사를, 그것은 매우 잘 작동 –

관련 문제