3

私はプログラミング、特にGUIの作成に非常に慣れていません。以前は C# でしかコンソール プログラムを作成していませんでしたが、現在は XNA を使用してゲームを作成しようとしています。GUIで画面に印刷する方法を教えてくれる人はいますか? 現在、 のバリエーションを試してSystem.Console.WriteLine("");いますが、画面に出力されません。私が使用しているコードは以下のとおりです。誰が私が間違っているのか教えてもらえますか?

ResourceCounter.cs:

      public ResourceCounter(Vector2 pos, GameTime gameTime)`
       {
        position = pos;
        over = false;
        clicked = false;
        gameTime = new GameTime();`

        currentTime += (float)gameTime.ElapsedGameTime.TotalSeconds; 
        System.Console.WriteLine("Resources: ", pSourceCount);

        if (currentTime >= countDuration)
        {
            pSourceCount++;
            **System.Console.WriteLine("Resources: ", pSourceCount);**
        }
        if (pSourceCount >= limit)
        {
            pSourceCount = 0;//Reset the counter;

        }


    }

そして私のメインGameScreen.csクラスでは:

    public override void Update(GameTime gameTime)
    {
        MouseState mState = Mouse.GetState();
        menu.Update(mState, cursor, gameTime);

        if (menu.currentstate == State.campaign)
        {
            campaign.Update(pTower);
            //campaign.Update(eTower);
            **System.Console.WriteLine("Resources: ", pSourceCount);**
        }
        base.Update(gameTime);
    }
4

1 に答える 1

3

SpriteBatch.DrawStringXNA でテキストをレンダリングするメソッドを使用します。

テキストを印刷するSystem.Console.WriteLineと、標準出力ストリームに書き込まれます。このストリームのデータは、コンソールを介して表示されます。あなたのゲームウィンドウはこれを全く気にしません。


テキストのレンダリング

ゲーム ウィンドウに描画するものはすべて (テクスチャ化された) 三角形で構成されていると言っても過言ではありません。テキストも例外ではありません。1 つの文字は、2 つの三角形で構成されるクワッド (長方形) を使用してレンダリングされます。

テキストXNA!は、文字ごとに 1 つのスプライト、合計 4 つのスプライト (8 つの三角形) を使用して描画されます。

でレンダリングされたテキスト

ビットマップ フォント

一般的なフォント形式は、文字をベクトルとして格納します。ビットマップ フォント(ゲームで通常使用される種類のフォント) の場合、実際の書体は 1 つまたは複数のビットマップ (テクスチャ) に格納されます。この方法は、キャラクターの形状自体が既にラスタライズされており、テクスチャからサンプリングするだけでよいため、はるかに高速です。明らかな欠点は、文字がすべて固定サイズになることです。ウェイトごと、サイズごと、フォント フェイスごとに 1 つのビットマップ フォントが必要です。

これは Arial フォント、サイズ 20、標準太さのスプライト マップです。

特定の文字を描画するために、レンダラーは文字がビットマップ上のどこにあるかを認識している必要があります。上の画像でわかるように、各文字は重ならない長方形の領域を占めています。これらの長方形の寸法は、追加のテキストまたは XML ファイルに保存できます。

たとえば、これはA上記のスプライト マップのキャラクターの定義になります。

<char id="65" x="235" y="47" width="12" height="13" xoffset="0" yoffset="3" xadvance="11" page="0" />
  • idは ASCII 値 (A=65)
  • xyは左上隅の位置です
  • widthそしてheightは長方形のサイズです
  • xoffsetyoffsetは画面上のオフセットです
  • xadvance前の文字までの距離
  • page文字を含むビットマップのインデックスです

結論

ゲームのテキスト レンダリングは、一般に考えられているほど簡単ではありません。XNAは、クラスを使用してプロセスを大幅に簡素化しますSpriteBatch。関連する手順の概要:

  • 標準フォントをビットマップ フォントに変換する
  • ゲーム アプリケーションにフォント ファイルを読み込む
  • 指定された文字列のスプライトを作成します
  • スプライトを画面にレンダリングする

フォントの例は、無料のBitmap Font Generatorで作成されました。

于 2012-11-16T12:07:54.940 に答える