zoukankan      html  css  js  c++  java
  • [翻译]XNA 3.0 Game Programming Recipes之fifteen

    PS:自己翻译的,转载请著明出处
                                                 3-5 显示文本文字
    问题
        你想显示一写文字,例如,想显示一些信息或者当前分数。
    解决方案
        SpriteBatch类,在这章的前四节第一次被说明,它也有渲染文本的能力。它和纹理一样用几乎相同方式被渲染。而不是导入一个texture2D,应该导入一个SpriteFont,它包含了你想使用的字体的类型和字体大小。下一步,你能可以使用SpriteBatch.DrawString方法来绘制你的文本。
    它是如何工作的
           首先,您需要创建一个SpriteFont文件。在你的XNA工程中点击你的Content选择Add-New item添加进去。选择精灵字体的对话框,给字体添加一个名字(如ourFont),然后点击Add.
        你应该呈现一个XML页面。那最重要的一行是设置FontName的属性。改变字体使你想要呈现在里面。下一个字体允许你选择字体的大小,同样也可以缩放字母。
    注意:你可以指定任何存在于你电脑上的字体。打开C:\WINDOWS\FONTS(如,电击开始按钮,选择运行,输入上述路径名)查看安装过的字体列表。字体的名字列显示了所有你可以指定的字体。如,如果字体的名字是Times New Roman,你可以指定Times New Roman作为FontName属性。
    注意:在别的PC机上编译你的代码,字体必须已经安装在这台电脑上了,否则会报错。
    提示:如同所有的艺术资产,一定要检查的字体版权在您开始你的项目之前。
        随着SpriteFont文件被创建,应该在你的类中添加一个SpriteFont变量到你的类中:
    1 SpriteFont myFont;
        它应该在LoadContent方法中被初始化:
    1 myFont=Content.Load<SpriteFont>("ourFont");
        确保你指定文件名你刚才创建在括号之间的。随着你的SpriteFont对象的加载,你已经可以使用你的Draw方法绘制一些文本内容了:
    1 spriteBatch.Begin();
    2 string myString="Elapsed seconds:"+gameTime.TotalGameTime.Seconds.ToString();
    3 spriteBatch.DrawString(myFont,myString,new Vector2(50,20),Color.Tomato);
    4 spriteBatch.End();
    提示:如果你使用另外一个SpriteBatch.Begin方法的重载,确定指定SpriteBlendMode.AlphaBlend作为第一个参数。换句话说,字母周围的象素不会被改变,绘制你的字母作为你指定颜色实心块。
    字符串长度
         你可能有疑问,一个spriteFont它在屏幕上会占多少个象素。这些信息可以用来缩放或者截取太长的字符串。你可以得到字符串的水平和垂直的大小。
    1 Vector2 stringSize=myFont.MeasureString(myString);
    重载
       SpriteBatch.DrawStringSpriteBatch.Draw方法中有一些别的被接收的重载版本。参看3-2节解释说明。
    1 spriteBatch.DrawString(myFont,secondString,new Vector2(50,100),Color.White,0,new Vector2(0,0),0.5f,SpriteEffects.None,0);
    StringBuilder
        代替刚刚接收的字符串,spriteBatch.DrawString方法同样接收一个StringBuilder对象。StringBuilder对象应该使用,如果你对字符串做了修改,如追加一些字符到字符串末尾。首先在你的代码顶上添加一个StringBuilder变量,这样你在每一祯就不需要重新创建一个了。
    1 StringBuilder stringBuilder=new StringBuilder();
        当你想使用这个方法,首先设置它的长度为0。然后,创建字符串,传递StringBuilderSpriteBatch.DrawString方法中:
    1 stringBuilder.Length=0;
    2 stringBuilder.Append("StringBuilder example:");
    3 for(int i=0;i<10;i++)
    4    stringBuilder.Append(i);
    5 stringBatch.DrawString(myFont,stringBuilder,new Vector2(50,180),Color.White,0,new Vector2(0,0),0.5f,SpriteEffects.None,0);
    代码
     1 //   你的SpriteFont对象在LoadContent方法中被初始化,与SpriteBatch一起被默认加载:
     2 protected override void LoadContent()
     3 {
     4     device=graphics.GraphicsDevice;
     5     spriteBatch=new SpriteBatch(GraphicsDevice);
     6     myFont=Content.Load<SpriteFont>("ourFont");
     7 }
     8 //这2个你需要的对象用Draw方法绘制一些文本内容
     9 protected override void Draw(GameTime gameTime)
    10 {
    11     device.Clear(ClearOptions.Target|ClearOptions.DepthBuffer,Color.CornflowerBlue,1,0);
    12     spriteBatch.Begin();
    13     string myString="Elapsed seconds:"+gameTime.TotalGameTime.Seconds.ToString();
    14     spriteBatch.DrawString(myFont,myString,new Vector2(50,20),Color.Tomato);
    15     spriteBatch.End();
    16     base.Draw(gameTime);
    17 }
  • 相关阅读:
    POJ 3070 Fibonacci【矩阵连乘】
    hdu 3038 How Many Answers Are Wrong【并查集的简单应用】
    POJ 2236 Wireless Network 【并查集的简单应用 判断是否在同一连通分量】
    POJ 1984 Navigation Nightmare【并查集思路总结】
    POJ 2492 A Bug's Life【并查集的简单应用同类的判断】
    POJ 1703 Find them, Catch them【典型并查集:判断在不同的集合】
    POJ 1456 Supermarket【贪心 + 并查集】
    ZOJ 3261 Connections in Galaxy War【并查集】
    POJ 1984 Navigation Nightmare
    POJ 1988 Cube Stacking【并查集的简单应用 堆木块】
  • 原文地址:https://www.cnblogs.com/315358525/p/1530916.html
Copyright © 2011-2022 走看看