C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十一)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十一)主位式地图移动模式

是否期待了很久?本节就来个重量级的做为开场白吧:主位式地图移动模式。何谓主位式地图移动模式,即以主角为中心,它的移动带动着所有对象包括地图、物体对象、其他玩家、怪物等等的相对移动,这些对象的移动都是以主角为参照物的。最典型例子莫过于当前流行的MMORPG了,你控制的角色在地图中永远是处于窗口正中心的位置(除了8个角落外),这就是主位式地图移动模式(如下图)。


有朋友开始焦躁了:我的妈呀,才刚学完牵引式地图移动模式,还没完全吸收呢,又来个什么鬼主位式地图移动模式,头都大冽!

其实一点也不用担心,一个结构贼清晰的程序只需要您一次轻轻的手术即可以实现功能的革新。是否对谦谦的魔术记忆犹新?神奇的时刻即将降临,Let me show you the principle first:


游戏窗口尺寸仍然暂定为800 * 600,如上图,我将游戏地图(尺寸1750 * 1440)分为9个部分;当主角处于左上(Spirit.X<=400 && Spirit.Y<=390)、右上(Spirit.X>=950 && Spirit.Y<=390)、左下(Spirit.X<=400 && Spirit.Y>=1050)、右下(Spirit.X>=950 && Spirit.Y>=1050)这4个角落区域时,地图静止,主角如第九节中的一样可以任意在窗口中移动,直接讲就是主角在窗口中的显示位置即是它的图片左上角点(X-CenterX,Y-CenterY);

当主角处于中上(Spirit.X>400 && Spirit.X<950 && Spirit.Y <=390)、中下(Spirit.X>400 && Spirit.X<950 && Spirit.Y >=1050)这2个边缘区域时,主角在水平方向上始终居中,移动时它在窗口中只会做上下移动,水平方向上通过地图相对反向移动形成主角水平方向前进的视觉效果;

当主角处于左中(Spirit.>390 && Spirit.Y<1050 && Spirit.X<=400)、右中(Spirit.>390 && Spirit.Y<1050 && Spirit.X>=950)这2个边缘区域时,主角在垂直方向上始终居中,移动时它在窗口中只会做左右水平移动,垂直方向上通过地图反向移动形成主角垂直方向前进的视觉效果;

当主角处于正中区域,也就是游戏中主角最多的时候,主角此时始终处于游戏窗口的正中位置(定位到脚底),当它移动时,在窗口中通过地图的反向移动从而在视觉上形成主角在移动(实际上主角是静止的,只做方向动画移动),这与第二十节中的牵引式地图移动模式有异曲同工之处,只是两者刚好相反:前者主角不动,地图反向移动;后者为地图随鼠标的牵引而移动,主角不动。最后得出结论:我们只需将第二十节中的AllMove()方法进行修改,即可以实现完美的模式转换。

时间: 2024-10-23 02:24:37

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十一)的相关文章

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十一)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十一)地图遮罩层的实现 前面的章节主要针对地图表现层进行讲解.通常来说,简单的游戏光有它就足够了:但是为了达到更加真实的光影效果,模拟真实的虚拟世界,我们还得继续在地图上下大工夫.本节将就如何实现地图中的遮罩层,即物体对角色的遮挡进行详细讲解. 首先我们来看一张比较完善的地图应该包含哪些内容: 从上图可以看到,我将一张地图引擎结构分成了3层(难道这就是传说中的地图三层架构?汗一个先...).中间的图片代表地图的

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十二)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十二) 雷.混.冰.毒.火.风 - 幻化中的魔法魅力 本节,我将为大家演示如何为游戏中的魔法增加华丽的附加属性. 第一步,定义规则: 1)定义魔法附加属性分类:在本教程示例游戏中,我将魔法附加属性定义为6类:雷.混.冰.毒.火.风,为什么要以这样无规律的方式去命名?因为是教程,我们需要学习的是如何实现对应效果,此6类属性算是目前网游中最流行的六大魔法属性,如果大家都掌握了,无论是中国式5行还是诸如其他的风格设

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十五)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十五)制作精美的可任意拖放对象的物品栏及装备栏 在通常的网络游戏中,物品.装备.技能.快捷按钮等窗口中的图标都是可以相互拖放的,不同的栏目有着不同的限制,例如技能图标不能拖放到物品栏及装备栏中,且不是所有的魔法技能都可以拖放(如被动技能等):而非装备类的所有物品则无法拖放到角色的装备栏中.那么本节我将向大家讲解如何在本教程示例游戏中添加物品栏及装备栏,并实现它们之间双向物品交换的两种模式:拖放模式和双击模

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十四)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十四)制作主角属性面板及加点器 游戏中会使用大量的菜单面板,而这些面板往往都带有选项卡.如果用Silverlight工具中的TabControl,则需要通过复杂的xaml重写模板来实现自定义样式,这一点时常让开发者头疼,毕竟界面的东西应该属于美工的范畴,这也是我所发现在目前Silverlight中唯一一处只能通过xaml而无法用代码实现的地方.当然,如果您对此特别感兴趣,同样可以到http://www.c

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十三)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十三)制作游戏主菜单面板及鼠标左右键快捷技能栏 每款MMORPG都有一个主菜单,通常置于窗口的底部.游戏中主角大部分的设置操作都从这里开启.如人物属性.物品(包裹).技能.任务.队伍.地图.家族.门派.商城.系统设置等等:当然,还包括快捷自定义菜单栏,以及类似<暗黑破坏神>中经典式的左右键快捷技能栏.这些内容在不同的游戏中往往会根据自身的特性稍做调整,但整体上大同小异.本节,我将同样以<剑侠世界&

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十二)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十二)制作精美的Mini地图② 前面章节中讲解的包括对象头像面板.Mini雷达地图等窗体都是位置固定的,在处理起来方式多样且简单:而RPG.SLG.休闲养成等类型的游戏中往往会大量使用到悬浮且可自由拖动的窗体,比如包裹面板.武器装备面板.个人属性面板.技能面板.系统设置面板等等,这就要求我们必须为游戏量身定做一个通用且易用的ChildWindow控件.那么本节我将为大家讲解如何制作一个包含可拖动头部.关闭

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十一)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十一)制作精美的Mini地图① 用什么来承受未来几个月日思夜想的折磨?除了学习还是学习. 感慨了一翻,嘿嘿.本节我将为大家讲解如何为Silverlight游戏制作一个精美的Mini地图.Mini地图又分两种,一种是通常处于游戏窗口右上角的Mini雷达(导航)地图:另一种是全景Mini寻路地图.本节我先向大家讲解如何制作导航Mini雷达地图.此类地图在游戏中主要起到导航作用,即引导主角前行的方向,并且呈现出

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十)斜度α地图的构造及算法 在当前的网络游戏中,地图基本都是采取一定斜度的拼装地图,这其中存在两种斜度地图的构造方式: 第一种我称之为伪斜度地图:该类型地图表现层图片为斜度的,但地图基底障碍物等的构造则实为正方形,如下图: 其实最典型的例子就是上一节所演示的内容了,地图是斜的,但是我们却用垂直的障碍物对其进行基底布局,这就是典型的伪斜度地图了. 这样的地图优点在于可以使用简单直接的地图构造算法(上一节中有详细的

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(九)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(九) 2D游戏角色在地图上的移动 本节将运用前两节的知识到实际的2D游戏人物在地图上移动中,同时也算是对前面八节的内容进行一次综合运用吧. 那么先从最底层的地图讲起.首先我将一张地图添加进游戏窗口中,这里我同样使用Image控件: Image Map = new Image(); private void InitMap() { Map.Width = 800; Map.Height = 600; Map.So

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(八)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(八) 完美实现A*寻径动态动画 本节将紧接着上一节,在它的基础上实现鼠标点击动态创建完美的A*寻路动画.(模拟游戏中人物的真实移动,这次可是有障碍物的,可以说基本上完成了人物移动引擎的一半了呢) 首先,在上一节的代码前部分加入一个叫做player的圆形作为我们将要控制的对象(模拟游戏中的主角,下文均称之为"主角"): Ellipse player = new Ellipse(); //用一个圆来模拟目