gpt4 book ai didi

java - 在游戏开始前添加菜单

转载 作者:行者123 更新时间:2023-12-02 13:20:56 25 4
gpt4 key购买 nike

出于某种原因,在添加菜单后我的 jFrame 不再弹出。我有什么遗漏的吗?我正在尝试制作一个在游戏开始之前弹出的菜单,其中包含“播放”按钮以及允许用户输入用户名的文本框。

关于如何修复我的代码有什么建议吗?谢谢!

这是我的菜单类:

    import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JPanel;

public class Menu extends JPanel{

private static final long serialVersionUID = 1L;

public Menu() {

JPanel buttonPanel = new JPanel(new GridLayout());

JButton play = new JButton();
JButton help = new JButton();
buttonPanel.add(play);
buttonPanel.add(help);

setFocusable(true);

addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Game.started = true;
}
});
}

public void paint (Graphics g) {
super.paint(g);
g.setColor(Color.black);
g.fillRect(400, 400, Game.WIDTH, Game.HEIGHT);
}

}

这是我运行程序的主类:

import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Main implements Runnable{
public void run() {
final JFrame frame = new JFrame();

frame.setTitle("Flying Square");
frame.setSize(Game.WIDTH, Game.HEIGHT);

//The menu
final Menu menu = new Menu();
final Game game = new Game();
frame.add(menu, BorderLayout.CENTER);
menu.setVisible(true);

try {while (Game.started == false) {
Thread.sleep(10);
}} catch (InterruptedException e){
e.printStackTrace();
}

frame.remove(menu);

//Main playing area
frame.add(game, BorderLayout.CENTER);
game.setVisible(true);
frame.revalidate();

// Put the frame on the screen
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

// add listeners
frame.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
flyingObject.jump();
}
});

frame.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {

}

@Override
public void keyTyped(KeyEvent e) {


}

@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE)
{
flyingObject.jump();
}

}
});

// Start game
Game.reset();
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Main());
}
}

最佳答案

所以,这个...

try {while (Game.started == false) {
Thread.sleep(10);
}} catch (InterruptedException e){
e.printStackTrace();
}

正在阻塞事件调度线程,阻止它处理任何事件并基本上导致您的程序挂起。

这不是您想要处理用户响应的方式。您的Menu应该监视用户的输入,可能通过一个或多个ActionListener,当触发某个操作时,它应该通知某种 Controller ,即 Controller 然后可以决定需要做什么,例如切换面板

您需要将代码分解为至少三个 block ,“游戏”、“菜单”和“ Controller ”,这样会更容易管理,而不是尝试改进功能到现有代码中

建议看看

关于java - 在游戏开始前添加菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43564695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com