2012-11-10 86 views
1

(我尝试发布一个图像,但不能b/c我的stackoverflow声誉不够高,所以与我一样裸露,因为我试图画一个字的图片:))使用c#/ xna框架如何使用多个类在屏幕上绘制重叠游戏分数?

我目前的得分输出是'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对象是黄色的(一个我“米试图修复),第二个是红色的(一个显示正确比分),如果我扭转这些再黄会工作,但红会没有

我更新/与图形中的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

旁很别扭使用字体类的,你的问题是:

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

为什么不是你在所有的FontList项目来设置他们每个人用新的得分值循环?

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

您实现与静态字段名sF一个单例模式,但不知你有多个实例进行更新。或者,如果您的计划只有一个分数,则AddScoretotalScore字段也应该是静态的。

+0

谢谢你,我只是一个初学者,仍然把所有东西都包裹起来,我把公共int totalScore = 0;改成public *** static *** int totalScore = 0;如你所说,这一切都很好现在,再次感谢! – Bilbo