posts - 156,  comments - 5252,  trackbacks - 0
公告

    网游今朝,抄袭当道,唯创新与突破方能引导中国网游行业走出囧境。从吸引玩家深入角度出发,更多的网游热衷于初期就让玩家体验到所有技能甚至最顶级装备;另一方面,每款作品开发商均会绞尽脑汁想出多多少少的噱头用于垂涎玩家眼球,比如《梦幻诛仙》所谓的首创“御空飞行系统”;《英雄远征》的“轻功系统”;《降龙之剑》的“开启天眼”以及《封神Online》中的“1080/24p超高画质电影级场景系统”,在崇尚2.5D王道画面的今天期待从层次感方面取得质的突破,隐约透露出依然有着那么一批优秀的国产网游开发者在为着理想的崛起而坚持奋斗着。

本节的目标就是实现类似的空间无限延伸效果,当然我们要做的是用最简洁的方法囊括到一切功能;什么御空飞行、开启天眼、超大场景,在Silverlight面前都是浮云,只不过将当前场景空间进行缩放并配合上相应的修饰处理而已。Silverlight中的ScaleTransform配合上短短数行代码修改即可轻松实现,不论你窗口尺寸是多少,不论显示器分辨率是多少,不论是Web模式、OOB模式亦或是WP7中,我们都能让玩家体验到可任意比例缩放延伸的游戏空间。

以本系列Demo的源码为例,在上一节的基础上我们只需在场景空间地图层中新增一个Scale属性,并以其为参数进一步修改MovingMap方法便立马搞定;是的,你没看错,绝对就是这么简单:

        double _Scale = 1;
        
/// <summary>
        
/// 获取或设置缩放率
        
/// </summary>
        public double Scale{
            
get { return _Scale; }
            
set {
                
if (_Scale != value) {
                    
int interval = 600;
                    GlobalMethod.RunEffectAnimation(
thisnew Pixelate(), true"Progress"050, interval, new ExponentialEase() { EasingMode = EasingMode.EaseIn }, false);
                    SetTimeout(
delegate { SetScale(value); }, interval / 2);
                }
            }
        }

        
/// <summary>
        
/// 无动画直接设置缩放比例(目的用于释放内存)
        
/// </summary>
        
/// <param name="value"></param>
        public void SetScale(double value) {
            
if (_Scale != value) {
                _Scale 
= value;
                thisScaleTransform.ScaleX 
= thisScaleTransform.ScaleY = value;
                MovingMap(player.Position);
            }
        }

        
/// <summary>
        
/// 相对于中心点进行镜头跟随(RPG主位式移动背景地图)
        
/// </summary>
        
/// <param name="center">中心点(通常为主角/英雄位置)</param>
        
/// <param name="offset">偏移量</param>
        
/// <returns></returns>
        public void MovingMap(Point center) {
             
this.Position = new Point(
                MapOffset(center.X 
* Scale, Application.Current.Host.Content.ActualWidth, mapRoot.BodyWidth * Scale, offset.X * Scale),
                MapOffset(center.Y 
* Scale, Application.Current.Host.Content.ActualHeight, mapRoot.BodyHeight * Scale, offset.Y * Scale)
            );
        }

在场景空间缩放过程中,我们可以通过添加马赛克动画以示过度从而平滑不同比例切换时的突兀体验(当然,所有的场景渲染动画效果均可作为过度,随你所好)

GlobalMethod.RunEffectAnimation(thisnew Pixelate(), true"Progress"050, interval, new ExponentialEase() { EasingMode = EasingMode.EaseIn }, false);

最后,为充分发挥鼠标功能,我们可将滚轮一并用上。模仿降龙之剑中的开启天眼方案,在场景空间切换结束时注册MouseWheel事件,当向上滚动鼠标滚轮时场景空间进行缩放操作;相反的,向下滚动鼠标滚轮时,Scale=1,即进行场景空间比例还原处理:

完成场景空间自由缩放功能后,便可在此基础上再进一步实现场景的仿真分层(地面/天空)系统,一切显得是那么的水到渠成。由于场景空间缩放的同时会连同主角一并缩放,因此要实现天空与地面的高低层次感以及大小距离感,我们需要分别从主角大小以及影子大小,云雾层的浓度以及Z深度顺序等方面进行一一处理:当角色飞空时,玩家“上帝”以俯视的角度看下去影子应该会显得很小以示拥有高度;同时将云雾弄多弄厚些显得地面的对象隐约迷蒙。当然,角色处于天空层在移动时理所当然应当忽略掉一切障碍物,不过如果您想将整个场景系统设计得再复杂些,还可添加一个新的空中障碍矩阵以适应:

如果还觉得不够真实,您完全可以用一张等屏尺寸的云雾半透明图片作为夹层插于天空与地面之间,如此地面的朦胧感更显强烈;甚至还可考虑对地面的所有物体进行虚化操作,当然性能方面有些吃不消,况且也确实没这个必要。

还在为不小心引到高级怪而担心吗?还在为忧心仇家就藏在附近而紧张吗?还在为走不通的路、趟不过的河、越不过的山而苦恼吗?还在为家里的显示器太窄太小而烦躁吗?快来体验Silverlight给网游开发带来的巨大惊喜吧,无限拓展的广角高清视距,超自由深度空间!原来游戏不论是开发或是娱乐都能如此舒心惬意的,妙哉,妙哉。

本节源码请到目录中下载

在线演示地址:http://cangod.com

posted on 2011-03-25 16:05 深蓝色右手 阅读(...) 评论(...) 编辑 收藏