Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在GUI上打印到屏幕_C#_Visual Studio 2010_Xna_Console.writeline - Fatal编程技术网

C# 在GUI上打印到屏幕

C# 在GUI上打印到屏幕,c#,visual-studio-2010,xna,console.writeline,C#,Visual Studio 2010,Xna,Console.writeline,我对编程非常陌生,特别是创建GUI;我以前只用C#编写过控制台程序,现在正试图用XNA构建一个游戏。谁能帮我让我知道如何在GUI中打印到屏幕上?我目前正在尝试System.Console.WriteLine(“”)的变体,但不会打印到屏幕上。下面是我正在使用的代码。谁能告诉我哪里出了问题 ResourceCounter.cs: public ResourceCounter(Vector2 pos, GameTime gameTime)` { positi

我对编程非常陌生,特别是创建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);
    }
使用XNA呈现文本的方法

当您使用
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
    是到前面字符的距离
  • 页面
    是包含字符的位图的索引
结论 游戏的文本呈现并不像人们想象的那么简单。XNA使用
SpriteBatch
类大大简化了流程。所涉及步骤的摘要:

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


字体示例是免费创建的。

我知道这与SpriteBatch有关!就是找不到正确的连接。是的,我知道我用Console.WriteLine是错的(提示在第一部分,Console!),但就是看不见。非常感谢,它现在运行正常。对不起,这个愚蠢的问题!我不认为这是一个愚蠢的问题。文本呈现是大多数应用程序的重要组成部分;这个问题的高度复杂性一开始是令人惊讶的。在我看来,你对控制台的困惑是完全可以理解的。