2012-11-10 33 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