我一直在研究一个基本的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);
}
}
}
}
}我还是很久很抱歉,我试着尽可能多地剪。有人能帮我一下吗?我会很感激的。
下面是有关程序行为方式的更多信息:
如果初始状态设置为menu,则applet将像没有菜单时一样运行。
游戏按下“播放”按钮后暂停游戏时,不会出现错误。
我猜想问题在于,在play按钮将状态设置为STATE.GAME之后,代码的开始再次将其设置为菜单。虽然我已经尝试了许多避免在代码开始时编写STATE.MENU的方法,但我不知道这是多么准确,结果也没有什么不同。(我试过布尔人,如果/否则)。
如果可以的话请帮忙!非常感谢。
此外,如果您需要更多的信息,我将提供:)
发布于 2014-07-13 16:09:59
谢谢你尽力帮助每个人!在努力解决这个问题之后,答案很简单。当按下播放按钮时,我需要再次运行我的开始方法.
谢谢:)
https://stackoverflow.com/questions/24724204
复制相似问题