Windows Phone 7 XNA开发中使用游戏组件

在做复杂的XNA应用时,单独的Game1类是无法满足众多物件摆放在一起同时进行处理的,就象面向过程到面向对象的进步一样,也就是我们不能把每个物件的创建与处理都在Game1中进行,那样的话Game1类将的重构和复用将无法进行,因为太乱了。

在早期的XNA中,我们需要使用一些设计模式来解决物件对象化的问题,但是在目前的版本中,微软提供给我们一个“游戏组件”的项可选择添加到游戏项目中,从而解决了复杂的物件问题。具体步骤如下:

1.在解决方案资源管理器的项目中点右建->添加新建项->选择添加“游戏组件”,并对其进行命名。添加完成后,可以看到资源管理器中会多出一个类(.cs)文件,该文件就是你所添加的组件了。类文件中可以看到如下代码:

public class GameComponent1 : Microsoft.Xna.Framework.GameComponent

根据代码我们可以了解到,组件类与Game1类一样,都需要继承自系统框架中的一个类型,从而对父类中的方法进行重写,在游戏执行的过程中调用指定的方法。

2.需要注意的是,在添加组件后,组件类默认继承自Microsoft.Xna.Framework.GameComponent这个类型,该类型是所有组件的基类型,其中包括Initialize(),Update()方法,但是不包括游戏所需资源的加载方法LoadContent()和Draw()绘制方法。这样的话,我们想要将物件独立应用的想法基本上不可能实现了,好在微软除了这个GameComponent基类外,还为我们提供了一个Microsoft.Xna.Framework.DrawableGameComponent(自行绘制的游戏组件)类型,当我们将继承的类型修改为:

public class GameComponent1 : Microsoft.Xna.Framework.DrawableGameComponent

之后,则可以在类中用override去重写LoadContent()和Draw()方法了。得到以下结果:

protected override void LoadContent()
{
      base.LoadContent();
}
public override void Draw(GameTime gameTime)
{
      base.Draw(gameTime);
}

3.有了重写后的方法之后,就可以进行加载资源了,那这个时候我们需要用到两个东西,一个是Content属性,原来在Game1类中,可以直接调用Content.Load()进行指定类型的资源加载,但是在这里,不能直接调用Content属性,需要用Game.Content.Load()读取资源。

4.关于绘制,在Game1类中有SpriteBatch spriteBatch;的定义,同样在组件类中也需要有SpriteBatch spriteBatch;的定义,在LoadContent()方法中,也需要增加spriteBatch = new SpriteBatch(Game.GraphicsDevice);但是需要注意的是,GraphicsDevice是通过Game属性而来的。

protected override void LoadContent()
{
    // 创建新的 SpriteBatch,可将其用于绘制纹理。
    spriteBatch = new SpriteBatch(Game.GraphicsDevice);
    base.LoadContent();
}

在创建了spriteBatch对象后,则可以开始在Draw()方法中进行物件的绘制了。注意,在这里同样要有 spriteBatch.Begin()与spriteBatch.End()方法。

public override void Draw(GameTime gameTime)
{
    spriteBatch.Begin();
    // 要绘制的内容
    spriteBatch.End();
    base.Draw(gameTime);
}

5.Update()方法与Initialize()方法我在这里就不过多说了,用法与Game1时相同。最后就剩下如何在Game1类中调用组件了,那么现在我们回到Game1类,在其Initialize()方法中,使用GameComponent1组件类型创建一个字段gc1,然后在初始化方法中gc1 = new GameComponent1(this)创建出gc1对象,并且在其构造方法中将当前游戏对象做为实参传入。并且,需要使用Components(游戏组件集合)属性,将gc1对象添加进来。代码如下:

protected override void Initialize()
{
    // TODO: 在此处添加初始化逻辑
    gc1 = new GameComponent1(this);
    Components.Add(gc1); 

    base.Initialize();
}

最后需要注意的是,一定要在创建好游戏组件时,将默认继承的GameComponent更改为DrawableGameComponent类。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索方法
, 类型
, 组件
override
windows phone 开发、windowsphone开发、windows phone 8开发、windows phone 10开发、windowsphone开发者,以便于您获取更多的相关知识。

时间: 2024-10-28 02:04:17

Windows Phone 7 XNA开发中使用游戏组件的相关文章

Windows Phone 7 3D开发中使用纹理贴图

Windows Phone 7对3D的支持还是不错的,据说是用OpenGL/ES做的,使用起来倒是也有点那种感觉.本文就不讲XNA 4.0的游戏框架了,直接上一段代码,该代码使用VertexPositionColor渲染了一个三角形,程序运行一切正常. 1. + expand sourceview plaincopy to clipboardprint? 2. 运行结果如下: 在确认了3D开发的这种代码结构以后,用VertexPositionTexture渲染同样的三角形,只是这次采用纹理贴图,

Windows Phone 7 3D开发中使用纹“.NET研究”理贴图

Windows Phone 7对3D的支持还是不错的,据说是用OpenGL/ES做的,使用起来倒是也有点那种感觉.本文就不讲XNA 4.0的游戏框架了,直接上一段代码,该代码使用VertexPositionColor渲染了一个三角形,程序运行一切正常. 1. + expand sourceview plaincopy to clipboardprint? 2. 运行结果如下: 在确认了3D开发的这种代码结构以后,用VertexPositionTexture渲染同样的三角形,只是这次采用纹理贴图,

Windows phone 8.1开发中如何处理摄像头翻转的问题

模拟器就像我们儿时的梦境,在其上运行应用程序时,一切总是那么美好的:而真机测试如同我们这个纷乱无章的现实世界,你会遇到各种小人和畜生,常常会遭受莫名的挫折.面对挫折,有人迎难而上,或不予理采,走自己的路:有的人则打退堂鼓. 面对摄像头翻转的问题,有些人也会选择逃避.我为什么不喜欢现在的某些程序员,就是因为这些人只会逃避和制造问题,遇到问题不是去寻找解决方案,而是坐在那里喊爹骂娘.虽然不可能所有问题都可以解决,但是,有许多问题是可以解决的,而这些人总心浮气躁,不愿意静下心来好好思考. N+6年前我

Windows phone 8.1开发中如何解决摄像头翻转问题(RuntimeApp篇)

昨天,我非常马虎地给大家说了有关处理物理摄像头翻转的话题,今天,还是这个话题,而且内容不差,只是为了完整性,顺便也提供了运行时API的版本,其实实现起来与SL框架版本差不多,毕竟这两个框架都有不少API是共享的. 首先,打开清单文件,在"应用程序"选项卡上,把"支持的旋转"右面的横向选上,其他的不要选,只选横向. 开发中如何解决摄像头翻转问题(RuntimeApp篇)-runtime error解决"> 然后切换到"功能"选项卡,

Android 游戏开发中绘制游戏触摸轨迹的曲线图_Android

       本篇文章主要来讲解怎样绘制游戏触摸轨迹的曲线图.        我们在onTouchEvent方法中,可以获取到触摸屏幕时手指触摸点的x.y坐标,如何用这些点形成一条无规则轨迹并把这条无规则轨迹曲线显示在屏幕上就是本篇文章的主旨内容.        Android Path类        Android提供了一个Path类 , 顾名思义这个类可以设置曲线路径轨迹.任何无规则的曲线实际上都是由若干条线段组成,而线段的定义为两点之间最短的一条线.path类就 可以记录这两点之间的轨迹

如何删除XP“附件”中的游戏组件

  问:我是机房管理员,机房电脑中安装的都是Windows XP操作系统,我想将"附件"中的游戏删除,但在"控制面板"的"添加/删除程序"中并没有游戏这一项,无法删除,请问有什么办法能够解决这个问题? 答:解决该问题的具体操作步骤如下: 1.首先要去除相关文件夹的隐藏属性以便操作,在系统桌面上用鼠标右键单击"我的电脑"图标,在随后出现的右键菜单中选择 "资源管理器". 2.接着单击菜单中的"工具→

iOS App开发中扩展RCLabel组件进行基于HTML的文本布局_IOS

iOS系统是一个十分注重用户体验的系统,在iOS系统中,用户交互的方案也十分多,然而要在label中的某部分字体中添加交互行为确实不容易的,如果使用其他类似Button的控件来模拟,文字的排版又将是一个解决十分困难的问题.这个问题的由来是项目中的一个界面中有一些广告位标签,而这些广告位的标签却是嵌在文本中的,当用户点击文字标签的位置时,会跳转到响应的广告页. CoreText框架和一些第三方库可以解决这个问题,但直接使用CoreText十分复杂,第三方库多注重于富文本的排版,对类似文字超链接的支

Windows phone 8.1开发中解决调用真实摄像头会死机的问题

无论你是用Silverlight还是用RT的API来开发,在使用MediaCapture拍照片或录视频时,要是在模拟器上运行会万事大吉:但是,一旦放到真实手机上运行,肯定有人发现了,细心的朋友肯定发现了--不知道为什么,会经常导致手机重启,或者死机. 啊,顺便给大家说说,死机不可怕,也不用重置,也不用刷机,不会丢失资料的,你只要同时按下"音量减"+"电源"两个键,要同时按住,不要放开,大约等10多秒后,会关机,然后你再放开这两个键,这样手机就软启了,不会丢失数据.

Windows Phone 8.1开发中如何把自定义字体塞进应用里

或许,系统自带的字体不足以体现应用程序的魅力,对于表现极强的汉字来说,更是如此.这时候,我们就会想,要是能把网上下载的艺术字体塞到应用包中,那岂不美哉?那么,这可以实现吗?答案是Yes的. 接下来,阿拉就给大家分别演示WP 8.1两个开发框架中如何嵌入自定义字体. 为啥是两大框架?我们知道从7x到8.0的开发框架是Silverlight for Windows Phone,为了便于兼容和直接项目升级,在8.1中,微软的开发团队依然保留了这个框架:另外一个框架是从Win RT应用移植的API集,这