我正在改网络上的一个开源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的位置
大家有没有什么办法让按钮能够除了不在游戏中显示,起始-输-赢这些位置都出现呢?我的思考是能不能改变Graphics2D对象的图层关系,让它在不同的状态有不同的图层位置,但是网络上好像没有这种知识,如有赐教,不胜感激。
补充一点,这个开源不是靠多布局切换页面的,而是一个Graphics2D对象行天下,代码如下:
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);
}
}