我正在做一个乒乓球比赛,我想要做的是当球越过球员的球,让球回到中间(我已经完成)和一个按钮,当我们按下它时,它的速度球回到原来的状态(比赛重新开始)。我已经拥有的是当玩家得分时游戏重置。我添加了按钮和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工作。
你的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();
}
}