Quantcast
Channel: Question and Answer » libgdx
Viewing all articles
Browse latest Browse all 434

LibGDX how to efficiently handle button presses

$
0
0

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?


Viewing all articles
Browse latest Browse all 434

Trending Articles