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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十三)牵引式地图移动模式①

 2009-06-22 07:08:36 来源:WEB开发网   
核心提示:在前面诸多的章节里,我就地图构造的实现做了讲解,C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十三)牵引式地图移动模式①,至此还遗留着一个关键问题:在游戏中是角色在移动还是地图在移动?它们之间的移动(位移)关系是如何实现的? 那么在接下来的章节中我将围绕这两个问题进行详细的分析解

在前面诸多的章节里,我就地图构造的实现做了讲解,至此还遗留着一个关键问题:在游戏中是角色在移动还是地图在移动?它们之间的移动(位移)关系是如何实现的?

那么在接下来的章节中我将围绕这两个问题进行详细的分析解说。

  首先,还得从游戏模式开始说起。目前2D俯视游戏中以即使战略、SLG、RPG(ARPG)等类型的游戏为主流。在即时战略、SLG大地图中,地图的移动原理是:当鼠标处于游戏窗口的8个边缘时,地图即开始移动,我暂且称之为牵引式地图移动模式。

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十三)牵引式地图移动模式①

图片看不清楚?请点击这里查看原图(大图)。

如上图,我们可以打这样一个比方:将游戏窗口比做我们的摄象机(上图中的Windows13窗口),在地图世界里不断的取景,我们从摄象机中看的只有摄象机镜头(游戏窗口)中能看到的区域(其他虚的地图部分窗口中是无法显示的)。但是游戏窗口又相当于是用支架固定着不能移动的镜头,那该如何才能看到景色的各个部位呢?那当然只有去移动背景地图图片让我们需要的景色部分呈现在窗口中。因此,根据上图描述的原理,当鼠标进入这8个区域(蓝色和棕色区域)时即触发地图的移动。

为更方便大家的理解,我以窗口中左边那块蓝色区域为例:当我的鼠标在游戏窗口内往左移动快接近边缘时,此时地图图片就开始反向向右进行一定速度或加速度移动;同样的,地图中的所有对象均跟着地图图片以同样的方向与速度进行移动,这样给我们视觉上产生一种感觉:我们在通过鼠标牵引游戏窗口向左方去探寻地图及物体对象。有的朋友就要问了:如果一张地图上有1000个对象,难道我每10毫秒都要去移动这1000个对象吗?这样性能上说是完全不科学的!对,在实际开发中如果一张地图拥有大量物体对象的话,我们肯定不会这样做(如果地图是小地图,或者物体不多,这样做是完全可行的,并且更容易实现)。在理解了这个原理后,我们看看在WPF/Silverlight中是如何进行这些操作的。首先需要做的就在地图移动的时候,根据地图移动方向时时(在界面刷新线程CompositionTarget或间隔为10毫秒的DispatcherTimer中)通过Foreach高性能的对所有物体对象(Spirit)的X,Y坐标进行修改;而什么时候才需要将这些物体对象显示出来呢?判断当前游戏窗口中心点对应的地图坐标点;并以该点为中点(圆心)进行一个矩形范围或半径为R的圆形范围(下文我简称为地图中心范围)搜索:如果某物体对象的X,Y坐标在此范围内则动态将它的显示实体加载它进入窗体画布(Carrier.Children.Add(Spirit)),然后再将之布局到它对应的X,Y坐标位置上(Canvas.setLeft(Spirit,X);Canvas.setTop(Spirit,Y);),并且继续根据地图的移动而移动(时时修改Canvas.setLeft(),Canvas.setTop());同样的,在地图移动中地图中心坐标是时时改变的,如果某些物体对象的X,Y坐标超出了地图中心范围,那么我们就将之从窗体画布中移除掉(Carrier.Children.Remove(Spirit)),此时这些物体对象相当于重新回到了等候显示的状态,它们的X,Y坐标同样在后台线程中时时更改,只要某个时候当地图中心再度出现在它们的附近时,它们又会重复以上的步骤再显示出来。

1 2 3 4  下一页

Tags:开发 WPF Silverlight

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