在Button-LibGdx上使用Actions

时间:2017-10-24 07:42:21

标签: libgdx

我有一个像这样的播放按钮;

    private void drawPlayButton() {
        playButton = new ImageButton(new TextureRegionDrawable(playTexture), new TextureRegionDrawable(pressTexture));
        stage.addActor(playButton);

        playButton.setPosition(UIConstants.PLAY_X, UIConstants.PLAY_Y, Align.center);

        playButton.addListener(new ActorGestureListener() {
            @Override
            public void tap(InputEvent event, float x, float y, int count, int button) {
                super.tap(event, x, y, count, button);

                game.setScreen(new GameScreen(game));

            }
        });
    }

我想使用动作为此按钮添加缩放效果。

我对动作并不熟悉,我试过这样的事情;

float duationsec= 0.5f;
playButton.addAction(Actions.sequence(Actions.scaleBy(0.2f,0.2f,duationsec),    
Actions.scaleTo(1f, 1f, duationsec)));
img.setOrigin(Align.center);
stage.addActor(playButton);

但这对按钮没有任何影响,同样的代码适用于Image.Is这是因为按钮使用可绘制的纹理?

如何使用动作将此效果赋予按钮?

此外我的代码只工作一次。我在show()中调用它。如果我在render()中调用它,它会以异常方式工作。我希望这个效果永远显示。

有可能实现这一目标吗? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

出于性能原因,大多数scene2d.ui组默认情况下transform设置为false,而ImageButton是该ui组的一部分,因此您必须使用setTransform(..)启用转换方法

有关详细信息,请查看
https://github.com/libgdx/libgdx/wiki/Scene2d.ui#rotation-and-scale

float duationsec= 0.5f;

playButton.setOrigin(Align.center);
playButton.setTransform(true);             //  <--  Enable Transform
stage.addActor(playButton);
playButton.addAction(Actions.sequence(Actions.scaleBy(0.2f,0.2f,duationsec),Actions.scaleTo(1f, 1f, duationsec)));  

修改

如果您想在用户上放大/缩小Click,请执行以下操作:

playButton.addListener(new ClickListener(){
        @Override
        public void clicked(InputEvent event, float x, float y) {

            playButton.addAction(Actions.sequence(Actions.scaleBy(0.2f,0.2f,duationsec),Actions.scaleTo(1f, 1f, duationsec), Actions.run(new Runnable() {
                @Override
                public void run() {
                    game.setScreen(new GameScreen(game));
                }
            })));

            super.clicked(event, x, y);
        }
    });