1

我当前的分数输出是在屏幕左上角写了两次“SCORE:0”(一个用红色字母,另一个用黄色),但位置略有不同,以使字母/数字具有复古的重叠外观。只有一个分数,但两层分数相同。

问题是只有分数的红色层更新,而黄色层保持在 0。

我正在使用以下代码在 FontManager 类(见下文)中创建我的 ScoreFont 类的两个对象,它们具有不同的颜色/位置,以提供重叠的感觉(红色上的黄色);

fontList.Add(new ScoreFont(Game.Content.Load<SpriteFont>(@"Fonts\Score"), scoreText, new Vector2 (5, -5), Color.Yellow, 1f, 0f));
//Adding this to make the score font stick out more by layering it
fontList.Add(new ScoreFont(Game.Content.Load<SpriteFont>(@"Fonts\Score"), scoreText, new Vector2(9, -5), Color.Red, 1f, 0.1f));

您会注意到创建的第一个 ScoreFont 对象是黄色的(我正在尝试修复的那个),第二个是红色的(显示正确分数的那个)。如果我颠倒这些,那么黄色会起作用,但红色不会。

我正在使用 for 循环更新/绘制 FontManager 类中的列表;

for (int i = 0; i < fontList.Count; i++)
        {
            Font f = fontList[i];
            f.Draw/Update(gameTime, sB);
        }

从 Font.cs 类派生的 ScoreFont.cs 类包含;

class ScoreFont : Font
{
public string scoreText;
public int totalScore = 0;

public static ScoreFont sF;
//Constructor
public ScoreFont(parameters)
:base (parameters)
{sF = this;}

//Add score
public void AddScore(int score)
{
    totalScore += score;
}
//Draw
public override void Draw(GameTime g, SpriteBatch s)
{
scoreText = "Score: " + totalScore;
s.DrawString(scoreText,blah, blah, ...);
}

当精灵离开屏幕时,我通过在不同的类中调用 AddScore 方法来更新分数;

ScoreFont.sF.AddScore(spriteList[i].score);

如果我只创建乐谱的一层,但当我尝试创建两层时,最上面的层(黄色层)不会更新,这很有效。

我该如何解决?

4

1 回答 1

0

除了非常尴尬地使用 Font 类之外,您的问题还在于:

ScoreFont.sF.AddScore(spriteList[i].score);

你为什么不在你所有的 fontList 项目中循环来为每个项目设置新的分值?

foreach(ScoreFont font in fontList)
    font.AddScore(myScore);

您使用静态字段名称实现单例模式,sF但不知何故您有多个实例要更新。

或者,如果您的计划是只有一个分数,那么AddScoretotalScore字段也应该是静态的。

于 2012-11-10T21:25:03.873 回答