我一直在开发基本的Applet(不是JApplet,我不知道为什么我的老师告诉我使用AWT ...)。这是一个简单的游戏,球在屏幕上弹起,收集点。
我最近添加了一个菜单,似乎一切正常,但是当我按“玩”时,游戏开始,并在第一帧冻结。我将在下面粘贴代码的框架,删去我认为与该问题无关的内容。请原谅我的语法和无知,因为我仅编程了一两个星期。

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Menu;
import java.awt.event.MouseEvent;

public class StartingPoint extends Applet implements Runnable
{
    private Graphics doubleG;
    Ball b;
    boolean gameOver = false;
    Menu menu = new Menu();
    private enum STATE
    {
        MENU,
        GAME,
    };

    public static STATE State =STATE.MENU;
    //  more irrelevant variables below. will comment "blah blah" when cut has been made.


    @Override
    public void init()
    {
        setSize(800,600);
        //  blah blah
    }


    @Override
    public void start()
    {
        b = new Ball();
        //  blah blah
        Thread thread = new Thread(this);
        thread.start();
    }

    @Override
    public void run()
    {
        if(State == STATE.GAME)
        {
            while(true)
            {
                b.update(this);
                // blah blah
                repaint();
                try
                {
                    Thread.sleep(17);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
        }
        else if(State == STATE.MENU)
        {
            while(true)
            {
                repaint();
                try
                {
                    Thread.sleep(17);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }

    public void update(Graphics g)
    {
        if(i == null)
        {
            i = createImage(this.getSize().width, this.getSize().height);
            doubleG = i.getGraphics();
        }
        doubleG.setColor(getBackground());
        doubleG.fillRect(0, 0, this.getSize().width, this.getSize().height);
        doubleG.setColor(getForeground());
        paint(doubleG);

        g.drawImage(i, 0, 0, this);
    }

    public void paint (Graphics g)
    {
        if(State == STATE.GAME)
        {
            b.paint(g);
            //blah blah
        }
        else if(State ==STATE.MENU)
        {
            menu.render(g);
        }
    }

    @Override
    public void mouseClicked(MouseEvent e)
    {
        if(mouseIn)
        { //mouseIn is a boolean that checks if Try Again is clicked on lose
            if(b.getScore() == -1)
            {
                b = null;
                b = new Ball();
                b.setScore(0);
            }
            if(State == STATE.MENU)
            {
                if(menu.isPlayb() == true)
                { //playb=boolean to check if "play" is clicked on menu.
                    State = STATE.GAME;
                    menu.setPlayb(false);
                }

            }

        }
    }
}


很抱歉,我尝试了尽可能多的削减。
有人可以帮我吗?将不胜感激。

以下是有关程序行为方式的更多信息:

如果将初始状态设置为游戏,则小程序的运行就像没有菜单时一样。

当按下播放按钮后游戏暂停时,没有错误提示。

我猜测问题出在播放按钮将状态设置为STATE.GAME之后,代码的开头再次将其设置回菜单。但是我不知道这有多准确,因为我尝试了许多避免在代码开头写入STATE.MENU的方法,但结果没有不同。 (我尝试过布尔值和If / else)。

如果可以的话请帮忙!
非常感谢。

另外,如果您需要更多信息,我将提供:)

最佳答案

感谢您尝试帮助所有人!在尝试解决问题的所有努力之后,答案很简单。我只需要在按下播放按钮时再次运行启动方法...。

谢谢 :)

10-05 18:38