思路已俨然清晰,接下来要做的是从零开始搭建游戏的主体框架。Silverlight作为RIA界的新宠儿,不仅在游戏开发方面性能优越,在企业开发领域的优异表现同样日益显著。像我们这些长期从事.NET开发的程序员们,如何顺利向Silverlight开发转型是入门时要解决的第一个难题。

首先要做的是安装配置开发环境及开发工具。这里我强烈推荐.NET程序员使用windows2003或更高版本的服务器操作系统以得到更快的编译速度;以目前开发Silverlight3.0程序应用为例,建议安装的开发工具是:VisualStudio2008sp1 + Silverlight3.0SDK + Silverlight3.0ToolKit;当然,如果需要协同美工进行联合开发,可以配合使用Blend3Silverlight图形处理工具,该工具与VisualStudio2008无缝兼容。更多更详细的配置方案及介绍请大家参阅jv9的这篇文章:Silverlight开发工具总汇

Silverlight4.0即将问世于不久的将来,伴随着412VisualStudio2010正式版的隆重登场,那将是万道无与伦比的光芒!呐喊吧:是时候轮回了!

安装完毕后,打开VisualStudio2008,点击->文件->项目,在项目类型中找到Silverlight节点,然后选择其中的Silverlight应用程序;这里我给该项目命名为Game,并在接下来弹出的新建Silverlight应用程序中选择ASP.NET Web 应用程序项目类型,关于这两种项目类型的区别可查阅这篇文章

项目创建完成后,我们可以在’Game’解决方案面板中看到VS为我们自动生成的项目内容如下:

该解决方案包含两个项目:C#项目Game和网站(Web)项目Game.Web。经常有朋友问我在Game.Web中的Default.aspxGameTestPage.aspxGameTestPage.html到底都各有啥作用?其实它们的代码几乎一模一样,Default.aspxCode-BehindASP.NET网站页面,GameTestPage.aspx为单独的ASP.NET页面,而GameTestPage.html则是最简单的静态页面。不难看出微软想告诉开发者们:Silverlight作为网页插件,在页面代码中只要通过<object>……</object>进行标记即可呈现而不论是动态的还是静态页面亦或是何种类型网页。大家可以根据自己项目的需要,在相应的页面文件上点右键->“设置为起始页”即可。例如,我暂时不需要额外的动态功能,那么我可以选择通过静态页的方式去展示我的Silverlight应用,接下来我只需删除掉Default.aspxGameTestPage.aspx,并将GameTestPage.html改名为Index.htm后设置其为起始页即可:

是不是清爽多啦~嘿嘿。另外,Game.Web是该解决方案的默认启动项目。如果你并不是通过本文前面叙述的方式去创建Silverlight应用,而是手动方式创建的这两个项目,那么你也可以通过在Game.Web上右键->“设为启动项目”进行启动设置:

再下来我们打开Index.htm,首先把代码最下面那个恶心的“(&)”符号删除掉;接着找到<object>……</object>这段,其中表示Silverlight应用程序路径的关键代码就在其中:

<param name="source" value="ClientBin/Game.xap"/>

    由此可见页面中嵌入的Silverlight应用程序源指向上图中的ClientBin目录中的Game.xap文件。当然,ClientBin文件夹目前暂时是空的,大家此时不妨按下Ctrl + Shift + B对整个解决方案编译一下即会发现ClientBin目录自动生成了一个名为Game.xap文件,没错,它即是Silverlight应用程序的最终产物,好比Flashswf文件一样:

有朋友问了,Game.xap是从哪来的呢?它并不是由Game.Web项目生成的,显然,是Game项目制造了它。那么GameGame.Web这两个项目又是如何进行协调联系的呢?大家可以参阅这篇文章:如何关联SilverlightASP.NET项目

托管Silverlight程序的宿主网站到此就算配置完成了,下面我们将进入本节的重点:按照上一节理清的思路一步一步将游戏主体框架搭建完善。

在自动生成的Game项目中仅有两个文件:App.xamlMainPage.xaml。其中App.xaml文件是Silverlight程序的启动配置文件,我们打开它的后台App.xaml.cs文件会看到这么一句:

        private void Application_Startup(object sender, StartupEventArgs e) {

            this.RootVisual = new MainPage();

        }

可见该Silverlight程序的默认启动类名为MainPage。而这个MainPage指的就是界面与代码分离的“用户控件”MainPage.xaml。这里要特别说明的是,Silverlight中拥有xaml界面Code-Behind的用户控件均继承自UserControl.NET程序员应该都知道C#中的类是单继承的,这就意味着如果我们要实现上一节中提到的游戏架设方式,就不能用它。因此,我们首先将MainPage.xaml删除掉,再在Game项目上点右键->添加->新建项->类,命名为Window.cs

启动类变了,但机器并不知道,所以我们得手动将前文提到的App.xaml.cs中那句话修该为:

this.RootVisual = new Window();

这个启动的Window实例即为游戏的主窗口,游戏中所有对象之间的交互均在其内部发生。例如鼠标点击窗口某个位置主角精灵向该坐标移动;鼠标移动到窗口边缘地图被牵引;主角被攻击受到伤害去血时反映到角色面板血条长度等等。为了能让大家更清晰的理解上一节以场景为轴心的游戏框架,我特地制作了一幅图来描述他们之间的关系:

图中详细的勾勒了各元素之间的包含关系,接下来我们按前面添加Window.cs类同样的方法向Game项目中添加GameBase.csDynamicObject.csStaticObject.csFloatableWindow.csHUD.csScene.csSprite.cs这些类文件并统一放到Controls文件夹中。到此,Game项目就设计完成了。

当然,游戏开发是很复杂的,为了提高效率,我们往往还需要在项目中用到第三方类库等工具作为辅助。以A*寻路方法为例,在制作Silverlight专属的动态链接库(DLL)这篇文章中我有详细说明如何制作自己的A*。那么我们同样的可以在法律允许的范围内将该A*项目中的主要文件作为一个工具添加到我们游戏项目中,具体步骤如下:

在解决方案’Game’上点右键->添加->新建项目,然后选择Silverlight类库并命名为Game.Tools

接下来我们在刚添加的Game.Tools项目中点右键->新建文件夹,命名为AStar。最后在AStar文件夹上点右键将前文链接中修改过的A*源码中的IPathFinder.csPathFinder.csPathFinderFast.csPriorityQueueB.cs4个文件添加到该文件夹中,并修改它们的命名空间为namespace Game.Tools.AStar。这样,每个工具的类放一个文件夹,它们均拥有自己清晰且独立的命名空间,不仅结构简单,而且方便管理。当然,要使得Game项目能使用Game.Tools项目中的工具类,还必须为Game项目添加对Game.Tools的引用,在Game项目中的引用节点上点右键->添加引用,切换到项目选项卡,并选中Game.Tools后确定即可:

嘿嘿,大公告成啦!最终我们将得到类似下图包含GameGame.ToolsGame.Web3个项目的游戏主体框架:

朋友,如果你能认真按本文的叙述一步步做下来,定会发现其实用VisualStudio去搭建Silverlight应用程序框架是件多么轻松且愉悦的事情。其实这个框架也同样是第二节中所讲到的Silverlight场景编辑器的主体框架。没错,场景编辑器即将开源啦!下一节我将继续为大家讲解如何进一步梳理框架中那星星点点的逻辑,让世界动起来吧!

在线演示地址:http://silverfuture.cn

WPF/Silverlight
作者:深蓝色右手
出处:http://alamiye010.cnblogs.com/
教程目录及源码下载:点击进入(欢迎加入WPF/Silverlight小组 WPF/Silverlight博客团队)
本文版权归作者和博客园共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面显著位置给出原文连接,否则保留追究法律责任的权利。
posted on 2010-03-04 22:44  深蓝色右手  阅读(9947)  评论(33编辑  收藏