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

是否期待了很久?本节就来个重量级的做为开场白吧:主位式地图移动模式。何谓主位式地图移动模式,即以主角为中心,它的移动带动着所有对象包括地图、物体对象、其他玩家、怪物等等的相对移动,这些对象的移动都是以主角为参照物的。最典型例子莫过于当前流行的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()方法进行修改,即可以实现完美的模式转换。

    原理就这么简单,至于其中的数字是如何得到的,我们只需要预先定义好两个参数WindowCenterXWindowCenterY。它们其实就是游戏窗体尺寸的5(如果有标题栏则需要减去标题栏的高度约20像素),以800*600的窗口模式游戏窗体为例,那么它的WindowCenterX=800/2 =400WindowCenterY=(600-20)/2=290,那么1024*768呢?以此类推。理请了思路,接下来就让我们来实现主位式地图移动模式下的AllMove()方法,这里我以主角位于左上这个区域为例:

private void AllMove() {

            if (Spirit.X <= WindowCenterX && Spirit.Y <= WindowCenterY) {

                //地图左上

                //所有精灵以主角为参照相对移动

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值