Java 用“得分计数器”;“数起来”;显示/动画
我正在尝试创建一个分数计数器的视觉表示,计数到球员的分数,为“复古”的感觉。为了显示球员的得分,我已经将计数器编程好了。我遇到的问题是“计数”表示。我在S/O上四处搜索,希望找到类似的东西,但是,可能是因为我搜索的措辞,我没有任何运气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
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个周期,然后增加分数。)这只是一种糟糕的/懒惰的设计,如果你以后想改进/重新发布/升级游戏,这会对你造成伤害。因为更新的硬件通常更快,帧数/秒更多客观上更好(开发者使用上述懒惰设计时除外)