I’m making a simple 2D game for android using LibGDX. My game needs to have many buttons in it that fire off a method when pressed, and I was wondering what the best way to do this would be.
I tried a simple solution using an InputProcessor and a bunch of if statements but it seems really unscalable and inefficient. Here’s my attempt:
InputProcessor inputProcessor = new InputProcessor() {
@Override
public boolean keyDown(int keycode) {
return false;
}
@Override
public boolean keyUp(int keycode) {
return false;
}
@Override
public boolean keyTyped(char character) {
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
// message = "Touch down: " + screenX + ", " + screenY;
if (screenY >= 2280) {
if(screenX >= 31 && screenX <= 281) {
yellowButtonPressed = true;
} else if(screenX >= 313 && screenX <= 563) {
redButtonPressed = true;
} else if(screenX >= 595 && screenX <= 845) {
blueButtonPressed = true;
} else if(screenX >= 877 && screenX <= 1127) {
greenButtonPressed = true;
} else if(screenX >= 1159 && screenX <= 1409) {
orangeButtonPressed = true;
} else {
//regular click
if (monster.isAlive()) {
monster.takeDamage(1);
}
}
} else if(screenY <= 1690 && screenY >= 1510 && screenX <= 1430 && screenX >= 1280) {
xPressed = true;
} else {
//regular click
if (monster.isAlive()) {
monster.takeDamage(1);
}
}
return true;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
// message = "Touch up: " + screenX + ", " + screenY;
if(yellowButtonPressed) {
if(screenX >= 31 && screenX <= 281) {
xButton.show();
menuShown = true;
tempCurrentMenu = "Heroes";
}
yellowButtonPressed = false;
} else if(redButtonPressed) {
if(screenX >= 313 && screenX <= 563) {
xButton.show();
menuShown = true;
tempCurrentMenu = "Fighters";
}
redButtonPressed = false;
} else if(blueButtonPressed) {
if(screenX >= 595 && screenX <= 845) {
xButton.show();
menuShown = true;
tempCurrentMenu = "Researchers";
}
blueButtonPressed = false;
} else if(greenButtonPressed) {
if(screenX >= 877 && screenX <= 1127) {
xButton.show();
menuShown = true;
tempCurrentMenu = "Artifacts";
}
greenButtonPressed = false;
} else if(orangeButtonPressed) {
if(screenX >= 1159 && screenX <= 1409) {
xButton.show();
menuShown = true;
tempCurrentMenu = "Purchases";
}
orangeButtonPressed = false;
} else if(xPressed) {
if(screenY <= 1690 && screenY >= 1510 && screenX <= 1430 && screenX >= 1280) {
menuShown = false;
xButton.hide();
tempCurrentMenu = "";
}
xPressed = false;
}
return true;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
return false;
}
@Override
public boolean scrolled(int amount) {
return false;
}
};
Is there a better way to do this?