【问题标题】:Return to main menu when game over java游戏结束时返回主菜单
【发布时间】:2018-03-05 20:52:45
【问题描述】:

我正在完成我的第一场比赛,但在玩家输掉比赛时返回主菜单时遇到问题。

主(游戏)类:

public static void main(String[] args) throws InterruptedException {
    Main main = new Main();

这是将菜单添加到我的框架的位置。菜单本身就是 带有图形和鼠标监听器的 JComponent:

main.setMenu();
    while (true) {
        menuChoice = meny.getDecision();
        if (i == 0 && menuChoice == 2) {
            main.run(cp);
        } else if (i > 0) {
            main.run(cp1);
        } else if (menuChoice == 0) {
            System.exit(0);
        }

public void run(Computer cp) throws InterruptedException {
    if (time == 0) {

这是我的框架获取游戏背景等的地方:

        setWindow(data, player, cp);
        time++;
    }

    //Here's a bunch of irrelevant ifs

    } if (cpScore.returnScore() == 10 && time > 0) {

您应该在此处返回主菜单。需要做什么 这里基本上是 mainmethod 在绝对值时所做的 开始(添加一个 Mainmenu 框架,用于进一步输入 说明)。

}
}

有什么想法吗?

【问题讨论】:

  • “菜单本身是一个带有图形和鼠标监听器的 JComponent:” - 你是在无限的while-loop 中执行此操作的。如果这是在事件调度线程的上下文中执行的,那么您将阻止它并阻止更新 UI。如果您不是在事件调度线程的上下文中执行此操作,那么您就违反了 API 的单线程性质 - 无论哪种方式 - 这都是一团糟
  • @MadProgrammer 如果我理解正确的话,它使用主线程。这应该是我的问题的问题吗?除了它不应该使用主线程的事实;我已经使用 Java 一个月了,所以我还没有瞄准完美的代码。
  • Swing 不是线程,只是单线程。如果您尝试从 EDT 上下文之外对 UI 执行操作,则会面临竞争条件和其他可能导致 UI 行为不正常的问题的风险
  • 如需尽快获得更好的帮助,请发帖minimal reproducible exampleShort, Self Contained, Correct Example

标签: java swing jframe jcomponent pong


【解决方案1】:

可能最简单的方法是将主菜单设置为自己的方法,其布尔值初始化为true,然后只要该值为true,菜单就会继续,当您想返回主菜单时,只需将此值改回 false,即可结束循环并返回主菜单方法。

【讨论】:

    【解决方案2】:

    在您的主类中创建一些函数,您可以根据需要调用这些函数来执行您的请求。没有人会为您编写代码,但这里有一些想法

    if (main.isGameOver() || main.isMainMenuRequested()) { 
       main.stopGameThread();
       main.purgeOldGraphicsEtc();
       main.executeMenuThread();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多