1
\$\begingroup\$

I am developing game using LibGDX . I want to create beautiful menu and to scale buttons when they are pressed but not in this way , when it is pressed scale it 1.5f , I want to scale it with animation . I am using imagebuttons .

\$\endgroup\$

2 Answers 2

2
\$\begingroup\$

Since you are using Actors you can simply give the actor an Action. For scaling you could use this method:

myActor.addAction(Actions.scaleTo(scaleX, scaleY, duration);

Then when the user stops pressing the button you can cancel the current action and give the actor a new one that scales back down to the original size.

\$\endgroup\$
0
\$\begingroup\$

You could change the scale by a factor n each time in the render loop when the button is pressed.

Initialisation of your ImageButton:

button = new ImageButton(Assets.button_style);
    button.addListener(new InputListener(){
        public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
                // enable scaling when button is pressed
                scale = true;
        return true;
        }

        public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
                button.setChecked(false);

                // disable scaling when button is released
                scale = false;
        }

        public void exit(InputEvent event, float x, float y, int pointer, Actor toActor) {
             // disable scaling when button is exited with mouse
             scale = false;
        }
    });

Render Loop:

if(scale) {
    // set width and height (add n to current size)
    button.setWidth(button.getWidth() + n);
    button.setHeight(button.getHeight() + n);

    // re-adjust position
    button.setPosition(button.getX() - n/2, button.getY() - n/2);
}

Hope that helps. Limitations are that your animation has to be linear, if you want another kind of Interpolation you should read something about Interpolation.

\$\endgroup\$

You must log in to answer this question.