libGDX как сделать реакцию при наведении курсора на кнопку?
Есть на экране кнопка, просто текст. Хочется, чтобы при наводке курсором на эту кнопку появлялся полупрозрачный фон и сам текст либо увеличивался, либо сдвигался в какую то сторону. Честно, перегуглил все, ответа не нашел. Буду рад помощи
public class MainMenuScreen implements Screen {
final PawnPath game;
OrthographicCamera camera;
TextButton buttonStart;
TextButton.TextButtonStyle buttonStyle;
Stage stage;
public MainMenuScreen(final PawnPath gam) {
game = gam;
camera = new OrthographicCamera();
camera.setToOrtho(false, 1920, 1080);
stage = new Stage();
Gdx.input.setInputProcessor(stage);
buttonStyle = new TextButton.TextButtonStyle();
buttonStyle.font = game.smFont;
buttonStart = new TextButton("Click me!",buttonStyle);
buttonStart.setHeight(100);
buttonStart.setWidth(100);
buttonStart.setX(Gdx.graphics.getWidth()/2);
buttonStart.setY(Gdx.graphics.getHeight()/2-300);
stage.addActor(buttonStart);
}
}
Ответы (1 шт):
Проверяйте в методе render пересечение координат мышки и кнопки. Если произошло пересечение, то обновляйте кнопку: меняйте стил, текст или что вам там надо сделать.
Что-то вроде
@Override
public void render(float delta) {
ScreenUtils.clear(0.2f, 0.2f, 0.2f, 1);
if (Gdx.input.getX() != x || Gdx.input.getY() != y) {
Rectangle buttonRect = new Rectangle((int) startButton.getX(), (int) startButton.getY(), (int) startButton.getWidth(), (int) startButton.getHeight());
boolean overlapped = buttonRect.intersects(new Rectangle(Gdx.input.getX(), Gdx.input.getY(), 1, 1));
if (overlapped && !startButtonOverlappedState) {
startButton.setX(startButton.getX() + 10);
startButtonOverlappedState = true;
} else if (startButtonOverlappedState && !overlapped) {
startButton.setX(startButton.getX() - 10);
startButtonOverlappedState = false;
}
}
x = Gdx.input.getX();
y = Gdx.input.getY();
stage.draw();
}
Дополню, что стили при разных событиях можно описывать прямо в скине. Что-то вроде:
com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
default: {
font: default
fontColor: RGBA_255_255_255_255
}
start: {
parent: default
font: default
fontColor: RGBA_255_255_255_255
downFontColor: down
overFontColor: focused
focusedFontColor: focused
focused: focusedDrw
}
}
...
com.badlogic.gdx.graphics.Color: {
...
focused: {
r: 0.5529412
g: 0.5529412
b: 0.5529412
a: 1
}
...
com.badlogic.gdx.scenes.scene2d.ui.Skin$TintedDrawable: {
focusedDrw: {
name: white-pixel
color: red
}
}
Весь скин не привожу, но смысл должен быть ясен. Если есть какие-то проблемы с созданием самого скина, то можно воспользоваться тем же SkinComposer.
Резюмирую: изменять положение кнопки можно из метода render, а сами стили кнопки описать в ские.