我遇到了一个我正在努力解决的问题。想象一下,简单的游戏,其中一些对象称其为汽车,在X轴上保持一动不动(x = 50),并且只能在y轴上移动(上下)。同时,在随机点以外(并向我的第一个对象移动),将创建另一个对象,因此它们的坐标在X轴上减小。一旦每个对象达到我的第一个对象坐标,某些变量 int分数; 递增。
int scores;
if(cars.getX() == getCarPos_X() && cars.getY() != getCarPos_Y() )
scores++;
基本上,这款游戏看起来像是在其他汽车和避免击中的汽车,并且每次我的汽车通过下一个移动汽车时,计数
那是什么问题?我使用计时器,这些计时器在重新粉刷之间计算时间。所有对象都传递到实际上所有图形绘制的油漆component。在ActionPerform的情况下,我调用所有动作的方法,一种方法可以检查与另一辆车发生碰撞的方法。如果发生碰撞,游戏停止和分数应写入一些TXT文件。问题是,尽管两个对象具有相同的坐标,但JVM将无数数字(得分)编写到文件中(我认为是因为坐标停止减小,并且每个计时器间隔都会检查碰撞,并且它==========================================是的,随着游戏的停止,对象仍然存在。)因此,我在TXT文件中的分数看起来像:
0
0
0
0
在一列中。或它显示我得到的任何分数。等等...
这是我使用的关键代码片段
public void actionPerformed(ActionEvent e)
{
animate();
checkTouch();
}
private void animate()
{
//here code that creates obstacles and moves them
}
checkTouch()
{
//objects creating in some inner class Cars and add to ArrayList ( I don’t mention about it as it is beside the point )
for(Cars car : cars)
{
if((cars.getX() == getCarPos_X && cars. getY() == getCarPos_Y())
{
//boolean var which stops game
inGame = false;
writeScore();
}
}
}
public void writeScore()
{
File scoresTxt = new File("scores.txt");
FileWriter fw = null;
BufferedWriter bw = null;
try
{
fw = new FileWriter(scoresTxt, true);
bw = new BufferedWriter(fw);
bw.write(scores + "n");
}catch (IOException e)
{
e.printStackTrace();
}finally
{
try
{
bw.flush();
bw.close();
fw.close();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
public void paintComponent (Graphics g)
{
if(inGame)
{
g.drawImage(myCar, 50, 100, this);
for(Cars car : cars)
{
g.drawImage(obstacleCar, car.getX(), car.getY(), this);
}
}
}
如果您需要我使用的一些额外代码,请写评论,然后添加。,我再次需要修复编写无数列数的错误,而不是从碰撞时刻开始的最终分数。我的代码有什么问题,以及如何解决此问题?作为初学者,请给我建议最简单的决定。预先感谢!
如果您的计时器是这样启动的,或类似的东西,当Ingame变量变为false时,您可以将其取消。关于计时器的好文章。
TimerTask task = new TimerTask() {
public void run() {
if (!inGame)
cancel();
else
// whatever it is that you are doing now
}
};
您可能还想以类似的方式停止在ActionPerformed(E)方法中处理事件。
if (!inGame)
return;