SilverlightXNA(C#)跨平台3D游戏研发手记:(十一)3DSLG(策略战棋游戏)设计案.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:17 大小:2.8MB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

SilverlightXNA(C#)跨平台3D游戏研发手记:(十一)3DSLG(策略战棋游戏)设计案.doc

SilverlightXNA(C#)跨平台3D游戏研发手记:(十一)3DSLG(策略战棋游戏)设计案例.doc

预览

免费试读已结束,剩余 7 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

某天,当你一不小心发现已经够随心所欲的驾驭3D摄像机之时,任何类型的3D游戏都将成为囊中玩物,过往如烟。回忆逝去的童年让我极度惦记的SLG策略战棋游戏,或许对于大多数玩家来说,它费时费力不被讨好;然而深邃的内涵和无限可能的战略战术始终占据着我内心很大一片天地。于是,在本系列前5节2DSLG知识原理的基础上,HYPERLINK"http://pifu.ttplay8.cn"http://pifu.ttplay8.cn萌发了移植一款基于平面的3DSLGDemo计划。首先,什么是基于平面的3DSLG游戏?大伙不妨先看看以下几款该类型经典游戏巨作截图-《英雄无敌6》、《文明5》和《三国志11》:无论地形单元格为四边形或六边形,其整体地貌都不存在高低起伏(NoHeightMap);用游戏开发者的话说便是:三维空间中,一条轴用做旋转,HYPERLINK"http://www.zhaicao8.com"http://www.zhaicao8.com另外两条轴形成类似2D中的Canvs平面承载对象。这样的设计更像是一盘3D化棋局,地形好比棋盘盘面,角色仿若棋子,附带一个环绕棋盘的360°轨道摄像机,无论视野还是战术方略都能得到淋漓尽致的体现。当然,除此之外,层次感更分明,基于HeightMap地形的立面3DSLG游戏亦备受日系游戏青睐,不乏大作,比如《火焰纹章晓之女神》、《皇家骑士团:命运之轮》和《三国志战记2》等,该类型游戏通常需要辅以更加复杂而强大的地形编辑器,这些内容并不属于本节范畴,后续章节中若有时间再做补充:OK,做足了SLG游戏设计方面的知识准备,接下来我们要做的头等大事便是打开HYPERLINK"http://www.cnblogs.com/alamiye010/archive/2011/12/05/2276471.html"\t"_blank"第4节的源码,神马差集运算、四叉树算法、蜂窝拓扑算法、A*算法等等统统一并拿来,将其中的Point改成Vector3(即原先的Point(X,Y)更换成Vector3(X,0,Y)),嘿嘿,原来编码也是可以这么浮云的。举个例吧,其中的DirectionScan方法在移植前后的对比:2D游戏中所有我们看得到的图形都是通过Image图片的形式予以呈现,而到了3D游戏中,这条路已经行不通了。比如我们要绘制3D四边形或3D蜂窝状地形单元格,此时就得自己编写基于三角面合成的3D面控件:Shape3D///<summary>///3D图形(面)基类///</summary>publicabstractclassShape3D:Object3D{protectedCamera3Dcamera;protectedTexture2Dtexture;protectedBasicEffecteffect;protectedshort[]indices;protectedVertexPositionTexture[]vertices;publicShape3D(ContentManagercontent,GraphicsDevicedevice,Camera3Dcamera):base(content,device){this.camera=camera;effect=newBasicEffect(device){TextureEnabled=true};}string_TextureName;///<summary>///获取或设置纹理资产名称///</summary>publicstringTextureName{get{return_TextureName;}set{_TextureName=value;texture=content.Load<Texture2D>(value);effect.Texture=texture;}}publicoverridevoidDraw(GameTimerEventArgse,ModelBatchmodelBatch){effect.GraphicsDevice.BlendState=BlendState.AlphaBlend;//设置透明覆盖(透明显示纹理alpha透明部分)effect.World=World;effect.View=camera.View;effect.Projection=camera.Projection;effect.CurrentTechnique.Passes[0].Apply();device.DrawUserIndexedPrimitives(PrimitiveType.TriangleList,vertices,0,vertices.Length,indices,0,indices.Len