C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十) 第一部分拓展小结篇
2009-07-01 07:07:30 来源:WEB开发网因此,我引入GridSize(单位格尺寸)这个参数来对坐标系进行缩放操作,从而达到简化地图构建过程。例如,我设置GridSize=20,那么游戏坐标系中的坐标都是窗口中坐标的1/20,例如窗口中Canvas.getLeft(Spirit)=123;Canvas.getTop(Spirit)=353;则对应游戏坐标系中(6,17)(可以直接用整数相除,结果会取整数部分)。这样的话,一张10000*10000的地图只需要Matrix[500,500]来实现障碍物构造,并且一个角色占据一个20*20尺寸的单元格是非常合理的。以下为关于引入GridSize这个参数概念的几大优势总结:
1、简化障碍物数组,并且使得地图构造伸缩自如:关于简化数组提高性能在上面已经说了,至于伸缩自如是因为我只需要通过改变GridSize的值,其他代码均不变即可以实现不同精度的游戏坐标系。不信?在前面章节中我的GridSize均为20,本节我将之设置成了10,大家可以很明显的看到障碍物精度提高了1倍(如下图):
大家也不妨将GridSize分别设置成1、5、30等,然后相应的修改障碍物(不同GridSize下,障碍物的位置肯定不同)再运行程序看看在不同GridSize下,游戏地图界面是一样的,但是单元格精度却是不同的。特别值得一提的是,当GridSize=1时,此时的寻路坐标系==窗口坐标系,这或许也能让朋友们更好的理解GridSize的意义。
2、提高寻路算法速度。例如我们设置GridSize=20,此时在40*40像素的地图区域内只有2*2=4个游戏坐标系单元格即(0,0)、(0,1)、(1,0)、(1、1);如果你需要让角色从区域左上角移动到右下角,则只需要在这4个点内进行寻路计算出从点(0,0)到点(1,1)的路径;而如果GridSize=1,即不进行游戏坐标系中单元格缩放而以窗口中的像素点作为基础单元格,那么在40*40像素区域内有40*40=1600个坐标点;同样的如果你需要将角色从区域左上角移动到右下角,就必须在这1600个点内进行寻路计算出从点(0,0)到点(40,40)的路径。因此我们将GridSize设置为<=20的值,即不失定位的精度,又大幅度简化及优化地图构造及性能,何乐而不为?
3、SLG、回合制等类型游戏地图引擎制作中的必定参数。如果你说RPG(ARPG、MMORPG等)类型的游戏肯定都有自己的地图编辑器,从而能轻松实现以像素为单位(精确度达到GridSize<=5)的高精度障碍物构造及地图编辑,这我100%赞同(前提:必须有地图编辑器,否则后果就如我上文中提到的,一张大且无规律的地图将让你痛不欲生)。但是,在SLG、回合制等基于N*N尺寸基础单元格的游戏中,就如同它们往往被大家通俗的描述为走格子(战棋类)游戏一样,地图格子的概念无处不在。无论是垂直地图或是斜度地图,通过设置GridSize都可以轻松的将之实现。
归纳补充了那么多关于A*的相关使用,大家是渐渐进入状态了?
本节即将结束,同样标志着第二部分的开始。第二部分我将就本文开头用彩色字所提到的相关知识进行讲解,或许那才是您真正想要了解的,它将引领我们进入一个真正2D游戏制作中,敬请关注。
Tags:开发 WPF Silverlight
编辑录入:爽爽 [复制链接] [打 印]- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››silverlight全屏显示图片
- ››Silverlight MVVM 模式(一) 切近实战
- ››开发者眼中的Windows Phone和Android
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››WPF学习笔记12. Binding (5)
- ››WPF学习笔记11. Binding (4)
- ››WPF学习笔记10. Binding (3)
- ››WPF学习笔记9. Binding (2)
- ››WPF学习笔记8. Binding
更多精彩
赞助商链接