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