CoolMAn
CoolMAn

Reputation: 1861

Creating a playButton in libGdx with InputHandler

I've created a game that uses 4 different GameStates: READY,RUNNING,GAMEOVER,and HIGHSCORE(variation of GAMEOVER except this one notifies the player that a highscore has been reached). My issue is that the way I've set up my InputHandler is that in the GameState.READY form the user can touch anywhere in the screen to advance into the GameState.RUNNING form. I've tried multiple tactics into creating a playButton, however nothing seems to be working my way. I created a PlayButton class as such:

public class PlayButton {
private Vector2 position;
private Rectangle boundingRectangle;
private int width;
private int height;

private PlayScreen playScreen;

public PlayButton (float x, float y, int width, int height) {
    this.width = width;
    this.height = height;
    position = new Vector2(x, y);
    boundingRectangle = new Rectangle();
}
public void update(float delta) {
    boundingRectangle.set(position.x,(position.y),width,height);
}
public float getTheX() {
    return position.x;
}

public float getY() {
    return position.y;
}

public float getWidth() {
    return width;
}

public float getHeight() {
    return height;
}

public Rectangle getBoundingRectangle(){
    return boundingRectangle;
}
}

and in my InputHandler i tried this:

public InputHandler(GameWrold myWorld, float scaleFactorX, float scaleFactorY){
    this.myWorld = myWorld;
    mySam = myWorld.getSam();
    playButton = new PlayButton(45,gameHeight-75,50,-35);
    buttonPlay = myWorld.getPlayButton();
    int midPointY = myWorld.getMidPointY();
    this.scaleFactorX = scaleFactorX;
    this.scaleFactorY = scaleFactorY;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        Vector2 touchPos = new Vector2();
        touchPos.set(Gdx.input.getX(), Gdx.input.getY());
    Vector2 tuch = new Vector2(screenX,screenY);
    buttonPlay.getBoundingRectangle();
    touch = new Rectangle(touchPos.x,touchPos.y,5,5);
        if (myWorld.isReady()) {
            if(playButton.getBoundingRectangle().contains(touchPos)){
                myWorld.start();
            }
        }
        mySam.onClick();

        if (myWorld.isGameOver() || myWorld.isHighScore()) {
            // Reset all variables, go to GameState.READ
            myWorld.restart();
    }
        return true; 
}
}

As you can see I tried creating a Rectangle with the touch variable and I tried checking if touch collided with the playButton boundingRectangle like this:

if(Intersector.overlaps(touch,playButton.getBoundingRectangle())){ or (playButton.getBoundingRectangle().overlaps(playButton.getBoundingRectangle()))

Upvotes: 0

Views: 437

Answers (1)

m.antkowicz
m.antkowicz

Reputation: 13581

Do not invent a circle and don't break open doors.

Use Scene2d :)

It is a simple UI framework fully compatible with libGDX that allows you to create Buttons, Sliders, Windows and another widgets in about one line of code.


You will find a nice description in a link I've attached above but TLDR version is:

  • Create Skin and pack a texture atlas for this using TexturePacker (free version is enough usually)
  • Create a Stage with appropriate Viewport

    Stage stage = new Stage(new FitViewport(WIDTH, HEIGHT));
    
  • Set the stage as input processor (it means that all event on the stage will be catched)

    Gdx.input.setInputProcessor(stage);
    
  • Create a Button with appropriate style (defined in Skin)

    Button button = new Button(skin, "style");
    
  • Attach a ClickListener with appropriate action to the Button

    button.addListener(new ClickListener(){
        @Override
        public void clicked(InputEvent event, float x, float y) 
        {
            //some action
        }
    });
    
  • Set it's position and add it to the stage

    button.setPosition(x, y);
    stage.addActor(button);
    
  • Fire act() and draw() stage's methods in your render()

    //render()
    stage.act();
    stage.draw();
    
  • You've earned few hours ;)

Upvotes: 1

Related Questions