1.3 XNA常用组件
1.3.1 LoadContent
打开VS Express for Windows Phone 2012,选择【File】→【New Project】菜单,新建项目XNAGameSample,如图1-2所示。
图1-2 新建XNAGameSample项目
XNAGameSample项目的解决方案如图1-3所示。
观察这个解决方案,在右侧的解决方案资源管理器(Solution Explorer)中可以看到两个项目:XNAGameSample和XNAGameSampleContent。
在项目文件所在的文件夹XNAGameSample中,可以看到“XNAGameSample”和“XNAGameSample Content”两个文件夹。
其中“XNAGameSampleContent”项目是用来管理游戏资源文件的项目,以后用到的贴图、3D模型文件、音效等资源都会放在这里管理;“XNAGameSample”是主项目。
在“XNAGameSample”项目中开打Game1.cs文件,这是游戏运行的主程序文件,如图1-4所示。
图1-3 XNAGameSample项目解决方案
在Game1.cs里面有Initialize、LoadContent、UnloadContent、Update、Draw五个方法。
那么这五个方法各自在游戏里起什么作用呢?首先介绍LoadContent。
举一个简单的游戏场景来说,如果绘制一个手拿盾牌的小兵,让它从手机屏幕的左边跑到右边,那么怎么做呢?
首先,用LoadContent来加载这个小兵所使用到的贴图资源,然后用Draw方法把贴图绘制到屏幕指定的位置。由于要求小兵是移动的,从左边跑到右边,在跑的过程中还涉及到帧动画的切换。这些操作都需要在Update中处理。简单来说,需要在Update中改变小兵的坐标位置和动画帧变换所用到的贴图资源。
由于Update和Draw函数在游戏运行过程中是按一定时间间隔循环被调用的方法,这样才能看到连续的动画,可以这样来描述这些函数的关系,如图1-5所示。
图1-4 Game.cs类
图1-5 LoadContent、Update、Draw和UnloadContent
在XNA项目中,如果制作2D游戏,那么都会涉及到使用图片资源。比如,人物的行走动画可以由连续播放一系列帧图片来完成。那么如何在XNA中加载图片资源呢?
在前面,我们建了一个XNA项目解决方案,里面就带有一个Content项目。游戏所用的图片、音效、字体等资源都是放在这个项目中的。当然这个项目可以认为是储存游戏资源的文件夹,方便用来管理游戏资源。
如何在Content项目中放置不同类型的文件呢?跟普通站点项目一样,同类型的文件一般都放在一个文件夹中。比如,图片资源都放在UI文件夹中,音效文件放在Sound文件夹中。
下面演示如何把UI文件里的一个.png图片添加进Content项目中。用鼠标右键单击UI文件夹,选择【Add】,再选择【Existing Item】,如图1-6所示。
图1-6 添加图片到Content项目中
然后选择预先放在UI文件夹中的Loading.png的图片,单击【Add】按钮,如图1-7所示。
图1-7 选择Loading图片
添加完图片,效果如图1-8所示。用鼠标右键单击图片可以看到属性,其中“Asset Name”是我们在XNA中引用资源的唯一标识。“Copy to Output Directory”默认选择“Do not copy”;如果选择了其他两个选项,那么会在最终产生的XAP文件中包含进了原始的.png文件。在最后的游戏XAP包里png图片文件会变成xnb文件,也就是XNA游戏运行时的资源文件。如果选择了复制,那么还会把原始的.png文件也复制进去,这样就造成了XAP体积不必要的增大。要想最终生成的XAP游戏包精简一些,就不要选择“Copy”。
需要说明的是,在XNA里支持的图片纹理文件除了.png,还有.dds、.jpg、.bmp、.tga等类型的文件。不过一般常用的是.jpg文件,如果需要使用到透明通道就用.png文件。
图1-8 图片纹理的属性设置