Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用按钮从游戏菜单开始游戏_Java_User Interface_Frame - Fatal编程技术网

Java 使用按钮从游戏菜单开始游戏

Java 使用按钮从游戏菜单开始游戏,java,user-interface,frame,Java,User Interface,Frame,我正在为一个简单的游戏编写一个程序,我们被告知要添加一些东西,比如开始菜单。我有自己的游戏工作,我点击运行,游戏拉在一个窗口,但现在我需要添加开始菜单,我有一个相当困难的时间做,不知道如何让它正常工作。我正在做的游戏是小行星 我现在的想法是,游戏从一开始就出现在JFrame上。因为游戏从一开始就出现了,所以我尝试创建一个JButton,当单击该按钮时,会初始化一个布尔变量的值,该变量决定游戏的状态为true。以下是我得到的代码: public Asteroids() { ast = ne

我正在为一个简单的游戏编写一个程序,我们被告知要添加一些东西,比如开始菜单。我有自己的游戏工作,我点击运行,游戏拉在一个窗口,但现在我需要添加开始菜单,我有一个相当困难的时间做,不知道如何让它正常工作。我正在做的游戏是小行星

我现在的想法是,游戏从一开始就出现在JFrame上。因为游戏从一开始就出现了,所以我尝试创建一个
JButton
,当单击该按钮时,会初始化一个布尔变量的值,该变量决定游戏的状态为true。以下是我得到的代码:

public Asteroids()
{
    ast = new ArrayList<Asteroid>();
    aliveAsteroids = NUM_ASTEROIDS;
    bullets = new Bullet[NUM_BULLETS];
    ship = new Ship();
    g2d = null;

    gameButton = new JButton("Start");
    gameButton.addActionListener(new
       ActionListener()
       {
          public void actionPerformed(ActionEvent event)
          {
              gameRunning = true;
          }
       });

    JPanel buttonPanel = new JPanel (new FlowLayout());
    buttonPanel.add(gameButton);

    frame = new JFrame("Asteroids");
    identity = new AffineTransform();
    rand = new Random();
    frame.setSize(FRAMEWIDTH, FRAMEHEIGHT);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(buttonPanel);
    frame.add(this);
    frame.setVisible(true);
}

public static void main(String [] args)
{
   Asteroids game = new Asteroids();
   if(gameRunning == true)
   {
      game.go();
   }
}

public void go() 
{
    //set up the ship
    ship.setX(FRAMEWIDTH / 2);
    ship.setY(FRAMEHEIGHT / 2);

    //set up the bullets
    for (int n = 0; n < NUM_BULLETS; n++) 
    {
        bullets[n] = new Bullet();
    }

    //set up the asteroids
    for (int n = 0; n < NUM_ASTEROIDS; n++) 
    {
        Asteroid a = new Asteroid();
        a.setX((double)rand.nextInt(FRAMEWIDTH)+20);
        a.setY((double)rand.nextInt(FRAMEHEIGHT)+20);
        a.setMoveAngle(rand.nextInt(360));
        double ang = a.getMoveAngle() - 90;
        a.setVelX(calcAngleMoveX(ang));
        a.setVelY(calcAngleMoveY(ang));
        ast.add(a);
    }

    addKeyListener(this);
    requestFocusInWindow();
    gameloop = new Thread(this);
    gameloop.start();
}
公共小行星()
{
ast=新的ArrayList();
aliveAsteroids=小行星数量;
子弹=新子弹[NUM_子弹];
船=新船();
g2d=null;
gameButton=新的JButton(“开始”);
gameButton.addActionListener(新的
ActionListener()
{
已执行的公共无效操作(操作事件)
{
gameRunning=true;
}
});
JPanel buttonPanel=newjpanel(newflowlayout());
buttonPanel.add(游戏按钮);
框架=新的JFrame(“小行星”);
标识=新仿射变换();
rand=新随机数();
frame.setSize(框架宽度、框架高度);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。添加(按钮面板);
框架。添加(此);
frame.setVisible(true);
}
公共静态void main(字符串[]args)
{
小行星游戏=新小行星();
if(gameRunning==true)
{
game.go();
}
}
公开作废go()
{
//摆好船
ship.setX(帧宽/2);
船舶高度(框架高度/2);
//设置子弹
对于(int n=0;n
出于某种原因,这不是我想要的工作方式,我不明白为什么。有些东西我尝试给我一个
NullPointerException
。作为记录,我知道什么是
NullPointerException
,以及什么是
null
意味着什么,但我不知道为什么在这个例子中会出现这样的情况。其他的东西,我试着拉起框架,但没有任何东西,甚至抛出了一堆异常,即使它应该有一个按钮

编辑:出现的异常是线程“AWT-EventQueue-0”java.lang.NullPointerException中的
异常
在游戏中。小行星。牵引子弹(小行星。java:176)
在game.Asteroids.paintComponent(Asteroids.java:148)

我的另一个问题是关于说
frame.add(this)
的那行。这到底是什么
?我知道
this
是一个关键字,可以用来初始化与参数同名的实例变量,例如
this.width=width。但是当我在这个上下文中看到这个
,我不知道它指的是什么。所以整条线就在那里,我不知道它是干什么的。我所知道的是,它为框架添加了一些内容。我无法理解那是什么


我想知道是否有人能帮我解释一下发生了什么,为什么我的程序不能正常工作,也许能提供一些关于如何走上正确轨道的建议/提示?我将非常感谢所有的帮助。

这类小行星是否扩展了任何东西(因为这将使
框架。添加(此)
非常不同)?也请查看
这类
@ricky3350的良好解释-是,它扩展了
JComponent
您的
main
方法将立即终止,因为您没有等待触发
actionPerformed
@RenéBlanken-我不确定您的意思。你能解释一下吗?这类小行星是否扩展了任何东西(因为这会使
frame.add(这个)
非常不同)?也可以看看
这类小行星的好解释@ricky3350-是的,它扩展了
JComponent
您的
main
方法将立即终止,因为您没有等待触发
actionPerformed
@RenéBlanken-我不确定您的意思。你能解释一下吗?