平方已经开发了一些 Windows Phone 上的一些游戏,算不上什么技术大牛。在这里分享一下经验,仅为了和各位朋友交流经验。平方会逐步将自己编写的类上传到托管项目中,没有什么好名字,就叫 WPXNA 吧,最后请高手绕道而行吧,以免浪费时间。(为了突出重点和减少篇幅,有些示例代码可能不够严谨。)

标签

在游戏中,我们需要向用户显示一些文字信息,比如:玩家的名字,分数等。这时候,可以使用 Label 类。Label 类继承自 Making,所以他是一个元件。以下是 Label 中的部分字段和属性:

private float blink;
internal float Alpha = 1;
internal readonly float Rotation;internal string Text;
internal float FontScale;
protected SpriteFont font;
protected Color color;protected Vector2 location;
public Vector2 Location
{get { return this.location; }set { this.location = value; }
}

字段 Alpha 表示标签的透明度,1 表示不透明,0 表示完全透明。字段 blink 的值应该在 -1 到 0 之间,如果 blink 不为 0,则标签会闪烁。

字段 Rotation 表示标签的旋转角度,属性 Location 表示标签的位置。

字段 Text 表示标签的文本,字段 FontScale 表示文本的缩放比例,字段 font 表示文本的字体,字段 color 表示文本的颜色。

internal Label ( string name, string resourceName, string text, Vector2 location, int width, int height, float fontScale, Color color, float blink, float alpha, int angle ): base ( name, resourceName )
{if ( null == text )throw new ArgumentNullException ( "text", "text can't be null" );if ( width > 0 )this.Width = width;if ( height > 0 )this.Height = height;this.Text = text;this.location = location;this.FontScale = fontScale <= 0 ? 1 : fontScale;this.color = color;this.blink = blink;this.Alpha = alpha < 0 || alpha > 1 ? 1 : alpha;this.Rotation = Calculator.Radian ( angle );
}

在 Label 的构造函数中,除了上面提到的字段,参数 name 表示元件的名称,参数 resourceName 表示标签使用的字体资源,参数 width 和 height 为标签的大小,可以忽略。你可以调用方法 InitSize 来获取标签的大小。

internal static void InitSize ( Label label, bool isForce )
{if ( null == label )return;if ( label.Width == 0 || isForce )label.Width = ( int ) ( label.font.MeasureString ( label.Text ).X * label.FontScale );if ( label.Height == 0 || isForce )label.Height = ( int ) ( label.font.LineSpacing * label.FontScale );}

你可以通过 Draw 方法来绘制标签。

internal static void Draw ( Label label, SpriteBatch batch )
{if ( !label.isVisible )return;Color color = label.color;if ( label.blink != 0 ){label.Alpha += label.blink;if ( label.Alpha <= 0.5 || label.Alpha >= 1 )label.blink = -label.blink;}if ( label.Alpha != 1 )color = color * label.Alpha;batch.DrawString ( label.font, label.Text, label.location * World.Scale, color, label.Rotation, Vector2.Zero, label.FontScale * ( label.Rotation == 0 ? World.Scale : World.FlipScale ), SpriteEffects.None, 0 );
}

在 Draw 方法中,我们将根据字段 blink 来不断的调整 Alpha 字段,也就是标签的透明度,这样标签的透明度将在 0.5 和 1 之间改变。

一个简单的例子

首先,我们需要使用 ResourceManager 来管理资源,另外,我们定义了两个标签。

private readonly ResourceManager resourceManager;
private readonly Label label1;
private readonly Label label2;

在构造函数中,我们初始化了 ResourceManager 和 Label,ResourceManager 将包含一个字体资源,他包含在资源项目的 font 目录中,字体资源被命名为 peg。

之后,我们创建了两个标签。第一个标签是浅绿色,字体缩放大小为 2 倍,第二个标签是垂直的,并且可以闪烁。

public World ( Color backgroundColor ): base ( )
{// ...this.resourceManager = new ResourceManager ( new Resource[] {new Resource ( "peg", ResourceType.Font, @"font\myfont" )} );this.resourceManager.World = this;this.label1 = new Label ( "l1", "Hello windows phone!", 2f, Color.LightGreen, 0f );this.label2 = new Label ( "l2", "peg", "Nothing!", new Vector2 ( 50, 300 ), 0, 0, 1f, Color.White, -0.01f, 1f, -90 );
}

当页面载入之后,我们加载所需要的资源。

protected override void OnNavigatedTo ( NavigationEventArgs e )
{// ...this.resourceManager.LoadContent ( );this.label1.InitResource ( this.resourceManager );this.label2.InitResource ( this.resourceManager );base.OnNavigatedTo ( e );
}

在 OnUpdate 方法中,我们让第二个标签显示游戏进行的时间。

private void OnUpdate ( object sender, GameTimerEventArgs e )
{this.label2.Text = e.TotalTime.ToString ( );
}

在 OnDraw 中,我们通过 Label 的 Draw 方法绘制了两个标签。

private void OnDraw ( object sender, GameTimerEventArgs e )
{// ...this.spiritBatch.Begin ( );Label.Draw ( this.label1, this.spiritBatch );Label.Draw ( this.label2, this.spiritBatch );this.spiritBatch.End ( );
}

本期视频 http://v.youku.com/v_show/id_XNTY3MzA2MTk2.html
项目地址 http://wp-xna.googlecode.com/

更多内容 WPXNA
平方开发的游戏 http://zoyobar.lofter.com/
QQ 群 213685539

欢迎访问我在其他位置发布的同一文章:http://www.wpgame.info/post/decc4_68994c

转载于:https://www.cnblogs.com/zoyobar/archive/2013/06/07/wpxna7.html

使用 Label 类在 XNA 中显示文本,WPXNA(七)相关推荐

  1. 在界面中显示文本内容

    iOS有单行和多行显示文本的控件对象: UITextField:简单的单行 UITextView:可滚屏的多行 在这里使用的是多行文本,即UITextView. 代码很简单,需要声明该视图的位置,字体 ...

  2. matlab字符串中的换行符,如何在MATLAB中的子图中显示文本/字符串行?

    使用text()函数,将'Parent'属性设置为子图的句柄,即 figure; h1 = subplot(2, 1, 1); % Do some plotting on h1 h2 = subplo ...

  3. 使用 Button 类在 XNA 中创建图形按钮(九)

    平方已经开发了一些 Windows Phone 上的一些游戏,算不上什么技术大牛.在这里分享一下经验,仅为了和各位朋友交流经验.平方会逐步将自己编写的类上传到托管项目中,没有什么好名字,就叫 WPXN ...

  4. 使用 CommandScene 类在 XNA 中创建命令场景(十二)

    平方已经开发了一些 Windows Phone 上的一些游戏,算不上什么技术大牛.在这里分享一下经验,仅为了和各位朋友交流经验.平方会逐步将自己编写的类上传到托管项目中,没有什么好名字,就叫 WPXN ...

  5. opencv中在图片上显示文本

    CvFont font; cvInitFont(&font,CV_FONT_VECTOR0,1,1,0,1,8); //在图像中显示文本字符串 cvPutText(image,"HE ...

  6. python中扑克牌类设计_python中的图像界面设计(二)

    1. Tkinter组件 Tkinter 提供各种的组件(控件),如按钮.标签和文本框,提供一个GUI应用程序使用.这些组件通常被称为控件或者是部件.目前有15中Tkinter的组件.这些组件的简单介 ...

  7. 在 Web 数据控件中显示二进制数据54

    简介 前面的教程中 , 我们介绍了将二进制数据与应用程序的基础数据模型相关联的两种方法 , 并使用FileUpload 控件从浏览器向 Web 服务器的文件系统上载.我们还将了解怎样将上载的二进制数据 ...

  8. java复选框如何显示在文本雨_java – 在复选框的itemStatechanged事件上显示文本字段...

    如何在Swing中的复选框的itemStatechanged事件中显示文本字段? 我正在尝试使用复选框和文本字段创建框架.我希望仅在选中复选框时才显示文本字段.因此,当我初始化组件时,我将textfi ...

  9. Halcon 图形窗口显示文本

    1.set_display_font set_display_font--设置显示的字体 函数原型:set_display_font ( : : WindowHandle, Size, Font, B ...

最新文章

  1. 抽象类和接口-手机小案例
  2. PowerShell在Exchange2010下快速创建动态通讯组
  3. python自动控制生产线输送线_一个关于自动化装配生产线结构组成案例,易懂干货...
  4. python3 xml 对象转字符串_Python3 基本数据类型详解
  5. html高度随宽度编号,纯css实现容器高度随宽度等比例变化的四种解决方案
  6. vs调用matlab功能,vs调用matlab
  7. jquery 下载 安装 浏览器支持
  8. 关于java的外语文献_java英文参考文献(涵盖3年最新120个)
  9. 机械设计课程设计含设计说明书
  10. Ajax回调函数中return不生效问题
  11. Android判断是否可以使用外网
  12. 如何生成密钥文件Snk
  13. Excel制作乘法口诀表
  14. 移动CPU异步多核和大小核的那些事
  15. 巨杉数据库基于mysql_【巨杉数据库SequoiaDB】巨杉Tech |巨杉数据库的HTAP场景实践...
  16. Burp Suite安装和使用方法
  17. 音频文件按照正常语句,断句拆分的处理方法
  18. PDF怎么编辑修改内容?分享两种编辑修改方法
  19. TI-RTOS之初体验(1)
  20. 苹果手机备份有必要吗_旧手机里的便签能备份到新手机里吗?

热门文章

  1. python输入一个英文句子、翻转句子中单词的顺序_ODOA(1) 翻转句子中单词的顺序(C语言实现)...
  2. matlab非线性回归delta,讲解:Delta-sigma、Matlab、analog-to-digital、MatlabPython|SQ
  3. java公路车 superma_SuperMac80
  4. 南通大学计算机专业分数线2020,2020南通大学录取分数线_历年各专业分数线(2017-2019)_各省投档线_一品高考网...
  5. 1的阶乘在c语言里咋表示,C语言编程求阶乘1到10并分别显示在屏幕上 – 手机爱问...
  6. c char*转int_C语言中的char类型也有signed和unsigned?字符也有正负之分吗?
  7. django开发个人博客
  8. html5基础知识点表单
  9. symantec 操作 重叠vo_无关收购 谈谈赛门铁克的产品策略思路
  10. 性能测试报告模板_性能测试新手误区