Java 用“得分计数器”;“数起来”;显示/动画

Java 用“得分计数器”;“数起来”;显示/动画,java,increment,game-development,Java,Increment,Game Development,我正在尝试创建一个分数计数器的视觉表示,计数到球员的分数,为“复古”的感觉。为了显示球员的得分,我已经将计数器编程好了。我遇到的问题是“计数”表示。我在S/O上四处搜索,希望找到类似的东西,但是,可能是因为我搜索的措辞,我没有任何运气 public class ScoreCounter { private Font font = null; private int width = 0; private long score = 0, targetScore = 0; publi

我正在尝试创建一个分数计数器的视觉表示,计数到球员的分数,为“复古”的感觉。为了显示球员的得分,我已经将计数器编程好了。我遇到的问题是“计数”表示。我在S/O上四处搜索,希望找到类似的东西,但是,可能是因为我搜索的措辞,我没有任何运气

public class ScoreCounter {
  private Font font = null;
  private int width = 0;
  private long score = 0, targetScore = 0;

  public void setFont(Font newFont) {
    font = newFont;
  }

  public void increment(int increment) {
    for (int i = increment; 0 < i; i--) {
      score++;
    }
  }

  public void paint(Graphics g) {
    g.setFont(font.deriveFont(Font.PLAIN, 30));
    g.setColor(Color.WHITE);
    width = g.getFontMetrics().stringWidth(Long.toString(score));
    g.drawString(Long.toString(score), 764 - width, 30);
  }
}
公共类计分器{
私有字体=null;
私有整数宽度=0;
私人长线得分=0,目标得分=0;
公共void setFont(Font newFont){
font=newFont;
}
公共空间增量(整数增量){
对于(int i=增量;0
你的游戏应该有一些“循环”的概念,即:框架。您应该拥有一个包含在“每个周期要调用的函数列表”中的函数,该列表为您计算新值

public void calculateScore()
  {
    newScore = previousScore + SCORE_PER_CYCLE_ADDED;
    // then you add in the scores from 'whatever' they did in that cycle
    // such as killing enemies
    for(Enemy defeatedEnemy: EnemiesDefeatedThisCycle){
          newScore += defeatedEnemy.getScoreValue();
    }
    // collected points items
    for(Item itemCollected: CollectedItemsThisCycle){
          newScore += itemCollected.getScoreValue();
    }
}

然后在其他地方,你可以在GUI上更新玩家每帧的新分数。

你的游戏应该有一些“循环”的概念,即:帧。您应该拥有一个包含在“每个周期要调用的函数列表”中的函数,该列表为您计算新值

public void calculateScore()
  {
    newScore = previousScore + SCORE_PER_CYCLE_ADDED;
    // then you add in the scores from 'whatever' they did in that cycle
    // such as killing enemies
    for(Enemy defeatedEnemy: EnemiesDefeatedThisCycle){
          newScore += defeatedEnemy.getScoreValue();
    }
    // collected points items
    for(Item itemCollected: CollectedItemsThisCycle){
          newScore += itemCollected.getScoreValue();
    }
}


然后在其他地方,您可以在GUI上更新玩家每帧的新分数。

您使用什么作为游戏的用户界面?您想将文本打印到文本控制台,还是您的游戏在窗口或类似窗口中?@MarkPeters是jPanel上的一个绘制字符串。
score
targetScore
在哪里定义?如果你提供了一个
定义,问题可能会更清楚。@nathanesau,请稍等,但我不确定这会有多大帮助。你是否有一个游戏循环,每秒画N次帧?你用什么作为游戏的用户界面?您想将文本打印到文本控制台,还是您的游戏在窗口或类似窗口中?@MarkPeters是jPanel上的一个绘制字符串。
score
targetScore
在哪里定义?如果您提供一个
定义,问题可能会更清楚。@nathanesau,请稍候,但是我不确定这会有多大帮助。你是否有一个游戏循环,每秒画N次一帧?你可以添加逻辑,当当前时间进入新的一秒时,它应该只添加
SCORE\u PER\u second\u ADDED
。(通过存储“上一次”系统时间的秒数,并且仅在时间戳大于下一秒时(或10秒或您希望游戏增加计数分数的方式等)添加分数。)我明白了。现在我假设这里的关键点是每帧,因为我有一个
for loop
,但它会立即更新分数,并且不计入分数。哦,刚才看到你的评论你的“for loop”就是我讨论的“cycle”。(我的术语很宽泛,因为我不确定你是否编写了自己的代码或使用了引擎等。)但是,是的,只需在循环中调用
calculateScore()
,然后让它处理如何添加分数的“逻辑”。“循环”和“每秒帧数”的概念是相关的,因为在更新“帧”之前,你需要完成一个“循环”。但是,不要将游戏的逻辑与游戏的帧速率紧密结合。(例如将帧速率限制为30/s,然后在
calculateScore()
中增加30个周期,然后增加分数。)这只是一种糟糕的/懒惰的设计,如果你以后想改进/重新发布/升级游戏,这会对你造成伤害。因为更新的硬件通常更快,帧数/秒更多客观上更好(开发者使用上述懒惰设计时除外)您可以添加逻辑,当当前时间已进入新秒时,它只应添加
SCORE_PER_SECOND_ADDED
。(通过存储“上一个”系统时间的秒数,并且仅在时间戳大于下一秒时添加分数(或10秒,或您希望游戏增加计数分数的方式,等等)我明白了。现在我假设这里的关键点是每帧,因为我有一个
for loop
,但它会立即更新分数,并且不计入分数。哦,刚才看到你的评论你的“for loop”就是我讨论的“cycle”。(我的术语很宽泛,因为我不确定你是否编写了自己的代码或使用了引擎等。)但是,是的,只需在循环中调用
calculateScore()
,然后让它处理如何添加分数的“逻辑”。“循环”和“每秒帧数”的概念是相关的,因为在更新“帧”之前,你需要完成一个“循环”。但是,不要将游戏的逻辑与游戏的帧速率紧密结合。(例如将帧速率限制为30/s,然后在
calculateScore()
中增加30个周期,然后增加分数。)这只是一种糟糕的/懒惰的设计,如果你以后想改进/重新发布/升级游戏,这会对你造成伤害。因为更新的硬件通常更快,帧数/秒更多客观上更好(开发者使用上述懒惰设计时除外)