【发布时间】:2013-05-01 16:15:41
【问题描述】:
在我正在开发的游戏中,我有一个显示分数的String,问题是代码将String 保存到文件中。我不希望文件不断保存分数,因为分数会随着您玩游戏而更新。因此,我像这样从摇摆定时器运行该方法。
Timer timer = new Timer(1, new ActionListener(){
public void actionPerformed(ActionEvent e){
save();
}
});
timer.start();
save 方法看起来像这样,它应该可以工作,因为我在前段时间编写的文本程序中使用了完全相同的代码。
public void save(){
try{
getScore = new File("Score.dat");
scoreFile = new FileOutputStream(getScore);
byte[] saveScore = score.getBytes();
scoreFile.write(saveScore);
scoreFile.close();
}catch(FileNotFoundException ex){
}catch(IOException ex){
}
}
我在游戏的开始屏幕上有两个按钮New Game 和Continue。我已经做到了,如果您按New Game,文件会将其文本更新为0,如果您按Continue,代码将照常进行,分数将等于文件中显示的分数。这是两个按钮的ActionListener。
public void actionPerformed(ActionEvent e){
Object command = e.getSource();
if(command.equals(newGame)){
try{
PrintWriter pw = new PrintWriter(new File("Score.dat"));
pw.print("0");
pw.close();
}catch (FileNotFoundException ex){
}
startGame = true;
}
if(command.equals(contGame)){
startGame = true;
}
}
文件是正常创建的,我没有收到任何错误,但文件没有更新,它里面总是一个 0。我尝试使用PrintWriter 而不是FileOutputStream,因为它可以将文件的文本设置为0,但是当我将它与pw.print(score); 一起使用时,我的文件资源管理器崩溃了,我必须重新启动我的通勤者。
编辑:
我已经弄清楚问题是什么,但我不知道如何解决它。当我打印出分数时,结果将如下所示:0, 0, 0, 0, 10, 0, 0, 0, 0, 20, 0, 0, 0, 0, 30(如果文件内的数字是0,如果是 50,则将所有 0 替换为 50) 等等。
如您所见,文件更新分数的机会只有 25%。我不知道为什么会发生这种情况,因为我在我的代码中看不到任何可能导致这种情况的地方。
这是加载分数的代码。
public void load(){
try{
br = new BufferedReader(new FileReader("Score.dat"));
score = br.readLine();
}catch (FileNotFoundException ex){
}catch(IOException ex){
}
}
通过在public Player() 方法中添加load(); 运行该方法一次(Player 是类的名称)。
【问题讨论】:
-
你试过flush()流吗?
-
我实际上会在这里打印抛出/捕获的异常: }catch(FileNotFoundException ex){ }catch(IOException ex){ }
-
您想每 1 毫秒保存一次文件吗?你还好吗?!?每次你的分数改变时保存文件,每 1 毫秒保存一个文件是没有意义的!
-
@BrianAgnew 我已经这样做了,但没有打印任何内容,因为从不抛出异常
-
您是否确保在开始新游戏之前和玩了一段时间之后检查文件中的内容。我问是因为当你继续时,我在任何地方都看不到你将比分读回到游戏中。
标签: java string file save actionlistener