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它会被写入标准输出流。然后通过控制台显示此流中的数据。您的游戏窗口根本不会注意到这一点。


文本渲染

公平地说,您绘制到游戏窗口的所有内容都由(纹理)三角形组成。文字也不例外。使用四边形(矩形)渲染单个字符,该四边形又由 2 个三角形组成。

文本XNA!将使用总共 4 个精灵(8 个三角形)绘制,每个字符一个精灵:

呈现在的文本

位图字体

常见的字体格式将字符存储为向量。对于位图字体(游戏中通常使用的那种字体),实际字体存储在一个或多个位图(纹理)中。这种方法要快得多,因为字符形状本身已经被光栅化了,只需要从纹理中采样。明显的缺点是,字符都是固定大小的。每个字体大小每个重量都需要一个位图字体。

这是 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)
  • x并且y是左上角的位置
  • width并且height是矩形的大小
  • xoffset并且yoffset是屏幕上的偏移量
  • xadvance是到前一个字符的距离
  • page是包含字符的位图的索引

结论

游戏的文本渲染并不像人们想象的那么简单。XNA极大地简化了SpriteBatch类的过程。所涉及的步骤摘要:

  • 将标准字体转换为位图字体
  • 在您的游戏应用程序中加载字体文件
  • 为给定的字符串创建精灵
  • 将精灵渲染到屏幕上

字体示例是使用免费的Bitmap Font Generator创建的。

于 2012-11-16T12:07:54.940 回答