【问题标题】:Printing to screen on a GUI在 GUI 上打印到屏幕
【发布时间】:2012-11-16 11:46:52
【问题描述】:

我对编程非常陌生,特别是创建 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);
    }

【问题讨论】:

    标签: c# visual-studio-2010 xna console.writeline


    【解决方案1】:

    使用 SpriteBatch.DrawString 方法通过 XNA 呈现文本。

    当您使用System.Console.WriteLine 打印文本时,它会被写入标准输出流。然后通过控制台显示此流中的数据。您的游戏窗口根本不会注意到这一点。


    文字渲染

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

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

    位图字体

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

    这是 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是左上角的位置
    • widthheight 是矩形的大小
    • xoffsetyoffset 是屏幕上的偏移量
    • xadvance 是到前一个字符的距离
    • page是包含字符的位图索引

    结论

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

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

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

    【讨论】:

    • 我知道这与 SpriteBatch 有关!只是无法弄清楚正确的连接。是的,我知道我在使用 Console.WriteLine 时错了(提示在第一部分,Console!)但就是看不到它。非常感谢,现在可以正常使用了。抱歉这个愚蠢的问题!
    • 我不认为这是一个愚蠢的问题。文本渲染是大多数应用程序的重要组成部分;问题的高度复杂性起初令人惊讶。在我看来,您对控制台的困惑是完全可以理解的。
    猜你喜欢
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    相关资源
    最近更新 更多