1

我目前正在编写一个类似于砖块破坏者的游戏,并且需要知道如何让我的程序等待特定的函数被调用。

我需要暂停程序,直到在按钮之间做出决定。例如,游戏启动,用户可以选择他在游戏中想要的颜色。因此,游戏暂停,直到他做出选择并且他很高兴,然后程序需要恢复到不同的阶段。

4

4 回答 4

9

如果您使用的是 Swing 组件,则可以向按钮添加一个,并在被覆盖的方法ActionListener中包含需要执行的逻辑。actionPerformed

另请参阅如何编写动作侦听器

编辑

我需要暂停程序,直到在按钮之间做出决定。例如,游戏启动,用户可以选择他在游戏中想要的颜色。因此,游戏暂停,直到他做出选择并且他很高兴,然后程序需要恢复到不同的阶段。

有几种方法可以解决这个问题,但我不打算在这里深入探讨并发编程的复杂性。你可以找到其他资源。话虽如此,我想说的一条评论是,您既不应该执行长时间运行的任务,也不应该在事件调度线程 (EDT)中休眠,因为这样做会导致 UI 变得无响应(即“冻结”)。

于 2012-04-16T13:36:30.603 回答
3

我需要暂停程序..

对于像砖块破坏者这样的游戏,您通常会有一个动画循环。按下按钮时,按照用户 132 的建议行事。至于发生这种情况时该怎么做,这取决于首先如何组织代码以循环。

EG The Swing Timer,这是一种在 GUI 中循环和暂停渲染的简单方法——它提供了start()&之类的方法stop()。如果您有多个计时器正在运行(例如,一个用于渲染循环,另一个用于关卡的“倒计时计时器”),您显然需要将它们全部暂停。

您当前代码的SSCCE可能会提供更多详细信息。

于 2012-04-16T14:16:06.483 回答
1

您处于 GUI 编程领域,该领域基本上使用事件事件驱动

在某种程度上,你问了错误的问题。

赛事驾驶系统中,您总是在等待。当某些事件发生时,您继续工作。

在您的情况下,您应该考虑按下按钮时该怎么做。

于 2012-04-16T13:39:02.327 回答
1

这是您将需要的结构类型的基本概述。

    import java.swing.*
    public class Breaker
    {
        private 
        Listener listener;
        JButton b1;

        public Breaker()
        {
          listener = new Listener();
          b1 = new JButton("b1");
          b1.addActionListener(listener);

        }

        class Listener implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            Component theEventer = (Component) e.getSource();

            if (theEventer == b1)
            {
                You're stuff here
            }

        }
        public static void main (String[] args)
        {
            new Breaker();
        }
    }
于 2012-04-16T13:49:38.833 回答