重置按钮LibGdx

问题描述 投票:0回答:1

我正在做一个乒乓球比赛,我想要做的是当球越过球员的球,让球回到中间(我已经完成)和一个按钮,当我们按下它时,它的速度球回到原来的状态(比赛重新开始)。我已经拥有的是当玩家得分时游戏重置。我添加了按钮和actionlistener,但actionlistener没有重启游戏。这是我的代码:

public void StartAgain(){
        if(resetButton = true){
        int playButtonWidth = ballPong.getBallSizeX();
        int playButtonHeight = ballPong.getBallSizeY();
        ResetButtonStage = new Stage();
        skin = new Skin();

        font = new BitmapFont(Gdx.files.internal("font.fnt"), false);
        style = new LabelStyle(font, Color.WHITE);

        buttonAtlas = new TextureAtlas("buttons/playButton.pack");
        skin.addRegions(buttonAtlas);


        playButtonStyle = new TextButtonStyle();

        playButtonStyle.up = skin.getDrawable("play");
        playButtonStyle.over = skin.getDrawable("play_pressed");
        playButtonStyle.down = skin.getDrawable("play_pressed");
        playButtonStyle.font = font;

        //------------------------------------------------------------------------------- Play button

        playButton = new TextButton("", playButtonStyle);
        //buttonStyle.font.setScale((float) 0.5);   

        playButton.setWidth(playButtonWidth);
        playButton.setHeight(playButtonHeight);
        playButton.setPosition(100,250);
        ResetButtonStage.addActor(playButton);

        playButton.addListener(new InputListener(){
            @Override
            public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
                ballPong.ballVectorX = ballPong.getBallSpeed();
                ballPong.ballVectorY = ballPong.getBallSpeed();
                resetButton = false;
                return true;
            }
        });

        Gdx.input.setInputProcessor(ResetButtonStage);
        batch = new SpriteBatch();

        ResetButtonStage.act();
        ResetButtonStage.draw();
    }
    }

我试图做的是创建一个名为resetButton的布尔值并将其设置为false,当玩家得分时,将布尔值设置为true,从而显示按钮。然而,我已经走错了路。我已经完成了,所以当球的位置低于球拍时,游戏重置并且StartAgain()方法显示。但显然球的位置现在在桨的上方(因为它已经重置)所以startAgain方法不会运行。

if(ballPong.getPosition().y<= 1){
            player2Score = player2Score +1;
            System.out.println("bottom");
            StartAgain();
            resetButton = true;
            if(ballPong.reset ==true){

                    ballPong.reset();
            }           
        }

我要问的是,我应该在哪里调用这个StartAgain()方法,以及如何让actionlistener工作。

java android libgdx actionlistener restart
1个回答
0
投票

你的startAgain方法的主体只在resetButton = true执行,但当你检查ballPong.getPosition().y<= 1你是否在调用resetButton = true之前没有设置StartAgain()

首先设置resetButton = true,这样当你打电话给StartAgain()时它可以通过if (resetButton = true)检查。

很难猜出这段代码在你的libGdx项目中的位置。它是在屏幕的render()吗?请显示您放置if(ballPong.getPosition().y<= 1)声明的代码。

猜测它的位置,你可以调整你的if语句,以考虑resetButton布尔值的当前状态。

if(ballPong.getPosition().y<= 1 || resetButton == true){
    player2Score = player2Score +1;
    System.out.println("bottom");
    resetButton = true;
    StartAgain();
    if(ballPong.reset ==true){
        ballPong.reset();
    }           
}
© www.soinside.com 2019 - 2024. All rights reserved.