首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java游戏小程序在第一帧上冻结

Java游戏小程序在第一帧上冻结
EN

Stack Overflow用户
提问于 2014-07-13 15:22:36
回答 1查看 121关注 0票数 0

我一直在研究一个基本的Applet (不是JApplet,我不知道为什么我的老师告诉我使用AWT.)。这是一个简单的游戏,有一个球在屏幕上弹跳,收集点。我最近增加了一个菜单,它似乎都工作正常,但当我按下“玩”游戏开始,并冻结在第一帧。我将粘贴下面的代码框架,删除我认为与问题无关的内容。请原谅我的语法,也许是无知,因为我只编程了一两周。

代码语言:javascript
复制
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);
                }   

            }

        }
    }
}

我还是很久很抱歉,我试着尽可能多地剪。有人能帮我一下吗?我会很感激的。

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

如果初始状态设置为menu,则applet将像没有菜单时一样运行。

游戏按下“播放”按钮后暂停游戏时,不会出现错误。

我猜想问题在于,在play按钮将状态设置为STATE.GAME之后,代码的开始再次将其设置为菜单。虽然我已经尝试了许多避免在代码开始时编写STATE.MENU的方法,但我不知道这是多么准确,结果也没有什么不同。(我试过布尔人,如果/否则)。

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

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

EN

回答 1

Stack Overflow用户

发布于 2014-07-13 16:09:59

谢谢你尽力帮助每个人!在努力解决这个问题之后,答案很简单。当按下播放按钮时,我需要再次运行我的开始方法.

谢谢:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24724204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档