WEB开发网
开发学院软件开发C语言 C#开发WPF/Silverlight动画及游戏系列教程(Game C... 阅读

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十七)战斗前夜之构建动态障碍物系统

 2010-09-30 20:47:32 来源:WEB开发网   
核心提示: 最后总结一下:以1秒为频率刷新动态障碍物在高精度需求的游戏中是不够的,往往需要设置为<=500毫秒;并且也不能太小了,C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十七)战斗前夜之构建动态障碍物系统(5),过小不仅会造成过度的性能消耗;同时由于异步

最后总结一下:以1秒为频率刷新动态障碍物在高精度需求的游戏中是不够的,往往需要设置为<=500毫秒;并且也不能太小了,过小不仅会造成过度的性能消耗;同时由于异步的原因也极其容易导致错误的障碍物识别,直接的结果就是穿越。我个人建议是在WPF中间隔设置为500毫秒,在Silverlight中间隔设置为1秒。大家在玩2D-MMORPG游戏时是否有过这样的经历:在城里人多的地方,如果游戏网速突然慢了一下或者游戏突然卡了那么一下,一不小心你的角色精灵就与其他某位玩家的角色精灵重叠在一块了,并且此游戏正常情况下是不允许重叠的(回合制游戏允许重叠,而ARPG类的是绝对不允许的)。根据本节讲解的原理我们可以很快的找出原因:在还未来得及更新出最新的动态障碍物数组前,两位角色已经跑到了当前被定义为非障碍物的坐标上。但是大家不要为此过份担心了,或者说此情况属于完全可以接受的范围中。因为由于障碍物数组的固定值部分(即固定的障碍物) FixedObstruction在游戏地图加载的时候就已经加载并固定了,意味着只要地图不更换它是不变的。所以不管处于异步处理的任何阶段,固定的障碍物如房屋啦、墙壁啦、树木啦等等之类的东西将永远无法穿越,这或许才是我们最终希望达到的目的。

这里还需要说明一下,本节构建的动态障碍物只是相对于主角的,也就是只能为主角所用。在后期加入怪物AI后,可以有两种常见的解决方案:第一种为所有怪物均使用FixedObstruction固定障碍物,这样怪物之间会发生重叠。第二种为给精灵增加一个Obstruction属性来保存相对于它们自身时时的障碍物信息,这种方式实现的结果是完美的,但过程是极其损耗空间与时间的。至于还有第三种更完美的方案吗?这是当然的,大家不妨想想,只有当精灵在移动的时候才会用得上障碍物对吧?那么我们是否只需要在每次发起移动前对全局的VaryObstruction进行拷贝,然后稍微处理一下此副本使之成为此次移动所要面对的障碍物,或许这才是最完美的解决之道。

那么来张测试图吧,此地图上随机布局了20个怪物,大家可以尝试在里面穿梭体验饶过怪物的爽快(由于怪物的图片是提取出来的,只做了稍微的加工调整,脚底并未完美的定位到中心,因此障碍物有时显得并不精确,这不是系统问题,而是图片结构引起的 ^_^):

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十七)战斗前夜之构建动态障碍物系统

相对于主角的完美障碍物系统总算构建完成。暴风骤雨来临的前夜,让激情燃烧我们的斗志吧,伟大的勇士!下期敬请期待。

出处:http://alamiye010.cnblogs.com/

上一页  1 2 3 4 5 

Tags:开发 WPF Silverlight

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接