1

私の現在のスコア出力は、画面の左上隅に2回(1つは赤い文字で、もう1つは黄色で)書かれた「SCORE:0」ですが、文字/数字にレトロな重なり合う外観を与えるためにわずかに異なる位置になっています。スコアは1つだけですが、同じスコアの2つのレイヤーです。

問題は、スコアの赤いレイヤーのみが更新され、黄色のレイヤーは0のままであるということです。

次のコードを使用して、ScoreFontクラスの2つのオブジェクトをFontManagerクラス(以下を参照)で異なる色/位置で作成し、重なり合う感じ(赤に黄色)を与えています。

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オブジェクトは黄色のオブジェクト(私が修正しようとしているオブジェクト)であり、2番目のオブジェクトは赤(正しいスコアを表示しているオブジェクト)です。これらを逆にすると、黄色は機能しますが、赤は機能します。しません。

FontManagerクラスのリストをforループで更新/描画しています。

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);

これは、スコアのレイヤーを1つだけ作成する場合にうまく機能しますが、2つ作成しようとすると、一番上のレイヤー(黄色のレイヤー)が更新されません。

これを修正するにはどうすればよいですか?

4

1 に答える 1

0

Fontクラスの非常に厄介な使用に加えて、問題は次のとおりです。

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

すべてのfontListアイテムをループして、それぞれに新しいスコア値を設定しないのはなぜですか?

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

静的フィールド名を使用してシングルトンパターンを実装しsFますが、どういうわけか、更新するインスタンスが複数あります。

または、スコアが1つしかない場合はAddScoretotalScoreフィールドも静的である必要があります。

于 2012-11-10T21:25:03.873 に答える