人气 227

[游戏程序] XNA中显示文字的解决办法[转帖] [复制链接]

九艺网 2017-3-10 17:01:36

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
基本思路是这样的:使用GDI+ 画出文字到一张bitmap上,把bitmap保存到一个流对象。在创建Texture2D的时候用此流对象创建即可。以下代码支持文字透明(因为保存到流的时CreateFromText(string Text,string FontName,float FontSize,Color FontColor)
        {候用的是PNG格式),这样就解决我们以前讨论过的中文显示的问题啦:
       public static Texture2D
            try
            {
                //临时位图
                System.Drawing.Bitmap tmpBmp = new System.Drawing.Bitmap(1, 1);
                //创建字体
                System.Drawing.Font font = new System.Drawing.Font(FontName, FontSize);
                //创建图形设备
                System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(tmpBmp);
                //评估文字大小
                System.Drawing.SizeF s = g.MeasureString(Text, font);
                //创建位图
                System.Drawing.Bitmap Bmp = new System.Drawing.Bitmap((int)s.Width, (int)s.Height);
                g = System.Drawing.Graphics.FromImage(Bmp);
                //绘图
                g.DrawString(Text, font, new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(FontColor.R, FontColor.G, FontColor.B)), new System.Drawing.PointF());
                g.Dispose();
                //保存图象
                MemoryStream strm = new MemoryStream();
                Bmp.Save(strm, System.Drawing.Imaging.ImageFormat.Png);
                strm.Seek(0, SeekOrigin.Begin);

                //从流创建纹理
                return Texture2D.FromFile(SpriteX.graphics.GraphicsDevice, strm);//,(int)strm.Length);
            }
            catch
            {
            }
            return null;
        }

记着要加using System.IO;另外记着要在解决方案管理器的引用中加入system.drawing。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-4-24 09:44 , Processed in 0.054963 second(s), 23 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.