我正在改网络上的一个开源2048,我新建了一个”开始游戏按钮“按钮,绑定了监听,现在我点击按钮后按钮没有消失.
如果我想让按钮随着鼠标点击后消失只需要在内部类里面设置一下
game_stame.setBounds(350,440,200,50);//原始位置
game_stame.addMouseListener(new MouseAdapter() {//鼠标点击
@Override
public void mousePressed(MouseEvent e) {
GetFocus();
startGame();//开始游戏,数组初始化,页面数据初始化
repaint();//绘制页面
game_stame.setBounds(1000,440,200,50);//点击后位置改变
}
});
这样即可以得到短暂的解决,但是当我的游戏死亡后回到初始页面这个开始游戏的按钮也不会回来了,如下图,按钮还在x=1000的位置
public void drawGrid(Graphics2D g) {//页面绘制
g.setColor(gridColor);
g.fillRoundRect(200, 100, 499, 499, 15, 15);//阴影绘制
if (gamestate == State.running) {//当点击开始了
for (int r = 0; r < side; r++) {
for (int c = 0; c < side; c++) {
if (tiles[r][c] == null) {//空方块绘制
g.setColor(emptyColor);
g.fillRoundRect(215 + c * 121, 115 + r * 121, 106, 106, 7, 7);//绘制小矩形
} else {
drawTile(g, r, c);//数字方块绘制
}
}
}
} else {//输赢的情况绘制
g.setColor(startColor);
g.fillRoundRect(215, 115, 469, 469, 7, 7);//内圈图层
g.setColor(gridColor.darker());
g.setFont(new Font("SansSerif", Font.BOLD, 128));
g.drawString("2048", 310, 270);
g.setFont(new Font("SansSerif", Font.BOLD, 20));
if (gamestate == State.won) {//赢了就弹出
g.drawString("you made it!", 390, 350);
//game_stame.setBounds(350,440,200,50);
} else if (gamestate == State.over) {//输了弹出
g.drawString("game over", 400, 350);
// game_stame.setBounds(350,440,200,50);
//JOptionPane.showMessageDialog(this,"GG");
}
g.setColor(gridColor);
g.drawString("click to start a new game", 330, 470);
g.drawString("(use arrow keys to move tiles)", 310, 530);
}
}
我再来说一下我的解决方法,方便若干年后有个和我一样无聊的搞2048的人。
game_stame.addMouseListener(new MouseAdapter() {//鼠标点击
@Override
public void mousePressed(MouseEvent e) {
GetFocus();
startGame();//开始游戏,数组初始化,页面数据初始化
repaint();//绘制页面
removeAll();//
updateUI();//
}
});
最后两个函数组合起来,一定要是removeAll(),不能是remove();
if (gamestate == State.won) {//赢了就弹出
g.drawString("you made it!", 390, 350);
setGamestate();//这是我的按钮函数
} else if (gamestate == State.over) {//输了弹出
g.drawString("game over", 400, 350);
setGamestate();//这是我的按钮函数
}
-输赢页面重新绘图时再把按钮画回去,类似于递归??就是这么无聊的方法实现了按钮的出现与否,但切记一定要第一步尾的那两个函数一起,不然第二次点击按钮不会消失。
调用按钮的setVisible(false)方法隐藏。