历时半年之久如火如荼般的教程编写,在所有朋友的支持与帮助下,本教程的Silverlight移植版终于迎来了开源的日子。心理埋藏着太多牢骚想发泄,但是想想其实又何必呢。所谓内行人看门道,外行人看味道,前进的道路只有虔诚者能领悟。
开源序言:本引擎的所有素材均来源于网络,仅供学习与练习使用,不作任何商业用途。所有代码均为“深蓝色右手”编写,代码所有权归“深蓝色右手”所有,在作者批准范围内使用。目前本引擎的完成度为单机部分的50%功能,后面的教程将接着继续拓展功能,最终的目标是实现100%单机部分功能。到此,我想首先回答一些朋友对本引擎的几点疑惑:
1)Q:Demo动不动就10几M,全部资源都包装在XAP里,那么如果做成正式的商业游戏,岂不是要上百M了?和有端的游戏又有何区别?
A:你可以这样理解,由于作者本人一点都不会Silverlight的通信,包括WebClient,WCF和Socket,因此无法实现动态按需下载所需素材等资源,从而只能使用最原始的方式将所有资源打包到XAP里面向大家展示。
2)Q:《火炬之光》让《暗黑破坏神3》回炉再造,你这游戏引擎差距也太大了吧?
A:如果您着实对Silverlight感兴趣,真心想去学好这门技术,建议您可以从搭建VS2008+SP1+Silverlight Toolkits平台开始,慢慢的一步一个脚印的去学习它。接下来您将从中体验到什么叫C/S和B/S;什么叫有端什么叫无端;并从中总结出Silverlight的应用领域。如果您已经是这方面专家了,坚信C++永远是王者中的王者,8G的《永恒之塔》仍旧是您心目中的英雄,Silverlight仍旧欢迎您,VC++是专为您准备的集成在VS2008中的编程语言之一。
3)Q:Silverlight装机量太小了,比起Flash/Flex近90%的装机量差距太大,能为客户所接受吗?再说了,Silverlight目前的性能好象比Flash差很多吧?
A:一个新的技术发展需要一个过程,而这个过程的时间长短取决于这门技术是否将引领技术的革新且推动历史的进程。目前Silverlight最新的版本为3.0,我给它的一句评价是:它已经开始走向成熟。Silverlight开发者可以使用众多的编程语言进行程序编写,例如C#、F#、VB、VC等等,如果说潜在的能参与进来的开发者,比起AS会多太多。就目前的版本来说,Silverlight在内存管理方面已经超越了Flash/Flex,在图形处理方面由于原理不同,无法做出孰优孰劣的比较,特别要提的是Silverlight中的Storyboard由于使用大量的double,在平滑动画时消耗了过多的CPU,以及HLSL还无法激发GPU渲染(就好比您拔掉独立显卡玩魔兽—体验的是CPU的心跳)而暂时不能大规模使用等等因素的存在,Silverlight在图形处理方面的改进还有很长的路要走。
至于装机量方面,我们每天都会收到好消息, MS在做到不垄断市场的前提下,从多角度对Silverlight进行推广,MSN的首页即将改版了,Flash将从此消失在MSN平台上。用MS的国语讲:我高兴我爱。
4)Q:目前该引擎的性能是否算是Silverlight所有RPG类型游戏引擎里最好的?
A:Silverlight的RPG游戏引擎目前也仅看到几个相对比较完整的,当然有国外的也有国内的。而我觉得我QQ1号群里的很多高手,如nowpaper、goods、内裤超人、潮州人等还有几位都做了Silverlight RPG游戏,他们做的性能都不错,比国外的会好很多,而且图形方面的处理方式各不相同,构思巧妙,时常让我眼前一亮。在大家的帮助下,我用了近一个月的时间对此引擎进行优化优化再优化,重构重构再重构;直到今日,仍然还有几处是可以大幅提高性能的优化还没做,必须测试过是否会影响到游戏画面流畅度后才考虑相应改进。
5)Q:你这游戏也叫引擎,改名叫游戏基础教程好了,我学两天C#,然后再学两天PS,然后再学两天3DSMAX,然后再学两天网络通信,然后再学两天数学运算逻辑,有空再学两天数据库,花点时间再学两天网页和Javascript就会做了,简直小儿科一个。
A:这里有篇关于引擎的介绍资料我觉得写得非常详细,建议大家也能抽时间看看。里面有句话特别精辟,它概括了不论是运行在何种平台上的一个游戏引擎应该具备最直观的充要条件(第十四段):通过上面这些枯燥的介绍我们至少可以了解到一点:引擎相当于游戏的框架,框架打好后,关卡设计师、建模师、动画师只要往里填充内容就可以了。
小的填充我就不讲了,下面我将模拟实际开发过程,通过添加一个新魔法和一张新地图来论证QXGameEngine是否是引擎:
一、添加一个新魔法:
①设计师首先用工具绘制出魔法动画,然后导出序列帧,并按如下规律命名好这些图片:
②打开QXGameEngine项目,展开Image/Magic文件夹:
观察里面已经有6个魔法了,那么我们需要添加一个新的文件夹取名6来存放第7个新魔法素材,并将①中的新魔法序列帧图片添加进去,然后修改它们的属性如下:
③打开Config文件夹中的Setting.xml配置文件,为该代号为6的魔法添加如下一段配置信息,前面的教程已经对这些信息进行过详细讲解,具体包含魔法的类型、伤害半径、伤害值、附加属性、各种其他参数等数据(每个属性名都写得很清楚,大家可以从中明白这些属性的意义):
<Magic Code="6" Mode="0" HasDirection="false" EndFrame="9" EffectiveFrame="1" BodyWidth="212" BodyHeight="220" Radius="110" CenterX="105" CenterY="145" AdditionalEffectCode="4" DecorationCode="-1" DecorationWidth="-1" DecorationHeight="-1" DecorationEndFrame="-1" DecorationType="0">
<Level Value="1" ATK="70" Consumption="3" AdditionalEffect="10" AdditionalEffectTime="5"/>
<Level Value="2" ATK="80" Consumption="5" AdditionalEffect="20" AdditionalEffectTime="5"/>
<Level Value="3" ATK="90" Consumption="7" AdditionalEffect="30" AdditionalEffectTime="6"/>
<Level Value="4" ATK="110" Consumption="10" AdditionalEffect="40" AdditionalEffectTime="6"/>
<Level Value="5" ATK="130" Consumption="13" AdditionalEffect="50" AdditionalEffectTime="7"/>
<Level Value="6" ATK="150" Consumption="16" AdditionalEffect="60" AdditionalEffectTime="7"/>
<Level Value="7" ATK="180" Consumption="19" AdditionalEffect="70" AdditionalEffectTime="8"/>
<Level Value="8" ATK="210" Consumption="22" AdditionalEffect="80" AdditionalEffectTime="8"/>
<Level Value="9" ATK="250" Consumption="26" AdditionalEffect="90" AdditionalEffectTime="9"/>
</Magic>
④打开MainPage.xaml主界面文件,添加该魔法测试菜单选项:
其中Tag属性值对应该魔法的代号,Content即为该魔法显示的名字。
仅用这4步即实现了一个新的魔法添加,而且无须改动一句逻辑代码,简单吗?我已经将此新魔法的素材放到了开源的引擎源码压缩包中,强烈建议大家参照以上的步骤一步步尝试去做,从中您将体会到该游戏引擎给您的游戏开发带来的便利与快捷。运行效果图:
二、添加一张新地图:
①打开本教程的地图编辑器(您可以到本教程目录中下载,带源码),然后点击“载入地图”将设计师画好的地图(该地图尺寸1600*1200)导入进去,然后我们将切片的尺寸设置为400*300,并通过绘制障碍物功能描绘地图上的障碍物(这里我随便绘制了一些,仅作为实验用):
②点击“导出障碍物”按钮,编辑器将导出一个xml文件,里面记录着我们在该地图上描绘的障碍物位置信息:
再点击“导出地图切片”得到该地图的切片图片:
③打开QXGameEngine项目,打开其中的Config/Setting.xml文件,我们首先为主角默认出现的地图添加一个传送点,用于将主角传送到新地图(代号为3)上:
<Teleport Code="0" FrameNum="8" Tip="荒野战场" Key="11" To="3" ToX="800" ToY="1015" ToDirection="3" X="4500" Y="3500" BodyWidth="128" BodyHeight="100" CenterX="64" CenterY="50"/>
然后添加该新地图(“荒野战场”)的切片到Image/Map/3/Surface/图片资源文件夹中:
接着为Setting.xml文件添加该新地图的配置信息:
<Map Sign="3" Obstruction="">
<Surface Width="1600" Height="1200" GridSizeX="10" GridSizeY="10" SectionNum="9" SectionWidth="400" SectionHeight="300"></Surface>
<Masks />
<Sprites />
<Teleports>
<Teleport Code="0" FrameNum="8" Tip="长安郊外" Key="10" To="0" ToX="4250" ToY="3400" ToDirection="7" X="600" Y="600" BodyWidth="128" BodyHeight="100" CenterX="64" CenterY="50"/>
</Teleports>
</Map>
这里要注意了,我们通过步骤②获取的障碍物信息写在第一行的Obstruction值里,那么最后的信息如下:
OK,完成了,同样没写一句逻辑代码,添加的仅仅是配置信息,测试效果截图:
至于其他对象的添加同样非常容易,比如如何添加新的怪物,这些内容在前面的教程中都讲烂掉了。添加新的特效,我们只需将特效序列动画帧图片放入对应的Image/Item文件夹中,然后通过实例一个QXDecoration控件即可,例如我只需要在角色升级时添加如下一段代码即可实现升级特效:
sprite.ParentCanvas.Children.Add(new QXDecoration() {
Code = 5,
EndFrame = 8,
BodyWidth = 200,
BodyHeight = 160,
CenterX = 100,
CenterY = 100,
Coordinate = sprite.Coordinate,
DecorationType = DecorationTypes.AutoRemove
});
当然,这些代码同样是可以通过Javascript脚本来实现,只需将逻辑封装进方法体内通过Silverlight与Javascirpt的交互来完成。
以上证据是否已足够证明QXGameEngine是一款游戏引擎。当然,它是不成熟的游戏引擎,为什么说不成熟呢?因为教程仍在继续,关注哦。 ^ ^
6)Q:此引擎何时能实现完整的MMORPG网络游戏功能,即包括通信部分;另外对该开源引擎的修改及使用需要符合何种条款?能否用作商业用途?
A:此引擎目前只实现了单机部分的50%功能,后续的教程将在此基础上不断添加新内容,直至实现100%纯2D MMORPG单机功能。至于网络通信部分,我暂不考虑写,这是出于不破坏Silverlight游戏市场而考虑的。
该引擎的所有代码均为本教程作者,即“深蓝色右手”编写,在此我郑重宣布,该引擎包括地图编辑器等的所有源码均可在不违反中华人民共和国法律的范围内使用,但必须在醒目的位置标注:基于QXGameEngine开发或转自深蓝色右手博客等字样,且为这些文字添加相应链接。小小的要求不为难吧?另外关于本引擎开源的目的只有两个:①我曾经的理想;②我希望借此鼓励更多的.NET人加入到Silverlight的开发行列,C#,你们的法宝呀,难道白学了,千万别浪费了呀。
共同学习,写下你的评论
评论加载中...
作者其他优质文章