(我尝试发布图片,但不能b / c我的stackoverflow声誉不够高,所以我试图画一个单词图片:)“
我当前的分数输出是'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);
如果我只创建一个得分层,但是当我尝试创建两个时,这个效果很好,最顶层(黄色层)不会更新。
我该如何解决这个问题?任何帮助将不胜感激。
答案 0 :(得分:0)
除了非常笨拙地使用Font类之外,您的问题还在于:
ScoreFont.sF.AddScore(spriteList[i].score);
为什么不循环使用所有fontList项目来设置每个新的得分值?
foreach(ScoreFont font in fontList)
font.AddScore(myScore);
您使用静态字段名sF
实现单例模式,但不知何故,您有多个要更新的实例。
或者,如果您的计划只有一个分数,那么AddScore
和totalScore
字段也应该是静态的。