当前位置: 首页 > news >正文

网站建设 淘宝详情拱墅区网站建设

网站建设 淘宝详情,拱墅区网站建设,大数据分析师,怎么自己做网站前面的章节主要针对地图表现层进行讲解。通常来说#xff0c;简单的游戏光有它就足够了#xff1b;但是为了达到更加真实的光影效果#xff0c;模拟真实的虚拟世界#xff0c;我们还得继续在地图上下大工夫。本节将就如何实现地图中的遮罩层#xff0c;即物体对角色的遮挡…    前面的章节主要针对地图表现层进行讲解。通常来说简单的游戏光有它就足够了但是为了达到更加真实的光影效果模拟真实的虚拟世界我们还得继续在地图上下大工夫。本节将就如何实现地图中的遮罩层即物体对角色的遮挡进行详细讲解。     首先我们来看一张比较完善的地图应该包含哪些内容     从上图可以看到我将一张地图引擎结构分成了3层难道这就是传说中的地图三层架构汗一个先。。。。中间的图片代表地图的表现层也就是我们视觉上直接看到的地图界面。关于它前面的章节中已有非常多的讲解这里就不再累述了。接着我们再看最下面那张地图底层它由黑白两大颜色组成似乎还有一圈黄色在右小角呢。有的朋友觉得它很奇怪似乎摸不着头脑好象和地图没啥关系吧其实只要将它和第二张图进行分析比较就会发现它上面的黑色就是地图中障碍物区域白色则为可以通行的区域那黄色呢还有朋友要问了前面的章节不是有讲A*寻路吗通过Matrix[]数组来构建障碍物不是很完美吗那为什么还要多此一举再为每张地图构造一张同比例的障碍物底层图呢我只想告诉广大的朋友们它的作用可大了尤其尤其在目前的Silverlight游戏开发中它的作用及拓展性可谓承前启后用科学发展观的话讲就是面向对象的思维开发Silverlight游戏。太多太多的悬念才能有更多的期待那么关于这张神秘底层图的讲解请听下回分析。     读者声音同志你也太假了吧这样就讲完这节啦BS你一下。     作者安啦怎么可能嘛这叫倒叙懂不啥叫倒叙其实俺也不太。。。嘿嘿   不瞎扯啦还剩一张图没讲呢对啦本节的主角就是它了地图遮罩层。   首先来讲讲实现原理吧我们可以从地图表现层下文直接就称之地图好了中看到遮挡人物的只有一棵树。那么我们想要在此地图上实现遮罩效果首先就得用Photoshop将这棵树给截出来当然越精确越好然后将它单独保存成一张背景透明的图片通常Windows桌面RPG游戏中会将所有的遮挡物统一规格例如50*50一张如大于则分两张、三张…等等然后将全部遮挡物图片放进一个庞大的二进制文件中显然这对于Silverlight基于网页的游戏是不容许的如果一张地图上有多个遮挡物同样将他们都截取出来然后依次命名保存。准备工作做完后我们就需要将遮罩层的图片放在顶层将地图放在底层人物等放在中间层。最后分别将遮罩层的所有图片布局到它们应该遮挡的位置上这样就完成了所有的遮挡工作了。好了。下面我将用代码来实现它。     这里我以下图作为地图实例     很明显该地图有三处障碍物两处遮挡物。障碍物我用绿色区域描绘出来了遮挡物则为两棵数我用Photoshop将它们分别截取了出来命名为Mask1.png和Mask2.png。   匆忙了点截得不好可不要见怪哪谁让这两棵树长得如此奇怪呢嘿嘿。     OK接下我以第九节的代码为基础进行修改首先构建障碍物             //构建障碍物             for (int y 22; y 24; y) {                 for (int x 5; x 16; x) {                     //障碍物在矩阵中用0表示                     Matrix[x, y] 0;                     rect new Rectangle();                     rect.Fill new SolidColorBrush(Colors.GreenYellow);                     rect.Opacity 0.3;                     rect.Stroke new SolidColorBrush(Colors.Gray);                     rect.Width GridSize;                     rect.Height GridSize;                     Carrier.Children.Add(rect);                     Canvas.SetLeft(rect, x * GridSize);                     Canvas.SetTop(rect, y * GridSize);                 }             }             for (int y 11; y 14; y) {                 for (int x 27; x 31; x) {                     //障碍物在矩阵中用0表示                     Matrix[x, y] 0;                     rect new Rectangle();                     rect.Fill new SolidColorBrush(Colors.GreenYellow);                     rect.Opacity 0.3;                     rect.Stroke new SolidColorBrush(Colors.Gray);                     rect.Width GridSize;                     rect.Height GridSize;                     Carrier.Children.Add(rect);                     Canvas.SetLeft(rect, x * GridSize);                     Canvas.SetTop(rect, y * GridSize);                 }             }             for (int y 18; y 21; y) {                 for (int x 33; x 37; x) {                     //障碍物在矩阵中用0表示                     Matrix[x, y] 0;                     rect new Rectangle();                     rect.Fill new SolidColorBrush(Colors.GreenYellow);                     rect.Opacity 0.3;                     rect.Stroke new SolidColorBrush(Colors.Gray);                     rect.Width GridSize;                     rect.Height GridSize;                     Carrier.Children.Add(rect);                     Canvas.SetLeft(rect, x * GridSize);                     Canvas.SetTop(rect, y * GridSize);                 }             }     三个循环分别构建了上图中的三处障碍物这几章都对它进行了修改大家应该再熟悉不过了。接下来就是遮挡物那两棵树了这里我用Image控件作为遮挡物的容器         //创建遮罩层         Image Mask1 new Image();         Image Mask2 new Image();         private void InitMask() {             Mask1.Width 238;             Mask1.Height 244;             Mask1.Source new BitmapImage((new Uri(Map\Mask1.png, UriKind.Relative)));             Mask1.Opacity 0.7;             Carrier.Children.Add(Mask1);             Canvas.SetZIndex(Mask1, 10000);             Canvas.SetLeft(Mask1, 185);             Canvas.SetTop(Mask1, 220);             Mask2.Width 198;             Mask2.Height 221;             Mask2.Source new BitmapImage((new Uri(Map\Mask2.png, UriKind.Relative)));             Mask2.Opacity 0.7;             Carrier.Children.Add(Mask2);             Canvas.SetZIndex(Mask2, 10000);             Canvas.SetLeft(Mask2, 466);             Canvas.SetTop(Mask2, 11);         }     这样就将遮挡物加入进了游戏窗体。有了前面那么多章节关于Image控件的使用知识上面的代码应该不难理解。这里特别要说一下的是为什么要将它们的Opacity设置为0.7因为这样的遮挡物会有一定的透明度当角色置身其中时会若隐若现从而达到真实模拟MMORPG的效果。至于为什么要将遮挡物的Zindex属性设置为10000呢这关系到游戏运行时地图中不光只有一个角色还会有非常多的物体及对象角色的存在它们之间也同样有着相互遮挡与被遮挡的关系。而在WPF/Silverlight游戏中物体的遮挡顺序一样可以使用画家算法该算法原理简单描述就是近物遮挡远物幸运的是在WPF/Silverlight中我们可以很方便的只要动态更新(一个对象的Zindex属性)(它的Y属性)即可以巧妙的实现此效果是不是有点邪恶嘿嘿。所以要将遮盖物的ZIndex设置得足够大以防止任何一个物体它的Y属性大过遮盖物的Zindex属性从而造成画面显示BUG。     其他的代码均和第九章的一样到这本节的目标已经达到了。那么让我们运行测试一下吧   大家可以随便在地图上点击会发现只要主角有经过这两棵树的地方都会被树以0.7的透明度遮挡并且障碍物也同样并行存在着主角如有经过同样会饶过它。障碍物人物遮罩层次分明互不干预完美默契的并行着。     至此地图引擎就基本完成了。下一节将讲解本节开始所提到的神秘第三层它在WPF/Silverlight游戏辅助方面起着非常大的拓展作用敬请关注。 作者深蓝色右手出处http://alamiye010.cnblogs.com/教程目录及源码下载点击进入(欢迎加入WPF/Silverlight小组 WPF/Silverlight博客团队)本文版权归作者和博客园共有欢迎转载。但未经作者同意必须保留此段声明且在文章页面显著位置给出原文连接否则保留追究法律责任的权利。 转载于:https://www.cnblogs.com/alamiye010/archive/2009/06/17/1505343.html
http://www.sadfv.cn/news/116296/

相关文章:

  • 优秀企业建站wordpress中文 插件下载
  • seo网站关键词排名优化商城网站制作
  • 湖南网站建设制作公司网站建设开发简介
  • 网站风格定位微站和网站数据
  • 网站免费制作平台wordpress产品页
  • asp.net 4.0网站开发实例教程自己做网站还能挣钱吗
  • 建设通相似的网站搭建什么平台如何表达
  • 郑州营销型网站设计运营信息推广网站点不开的那种怎么做
  • 山东省建设监理协会官方网站链接网站某一页面如何做
  • 企业官网建站的流程传媒公司vi
  • 济南网站建设行知kejiwordpress 产品展示
  • 洛阳网站建设价格低网站做二维码
  • 建立网站专业公司吗医疗营销网站建设
  • 合肥网站优化排名推广喀什建设网站
  • 网站建设服务合同协议前端网站建设插件
  • 安徽休宁建设厅网站长沙大的建网站公司
  • 网站开发定价wordpress 首页动画
  • 俄华网站建设网站域名自动跳转
  • 网页设计比较好的网站怎么看网站发的外链
  • 凯发网站app代理推广平台
  • 外贸网站收到询盘六安火车站网站
  • 那个网站建设网站被做站公司贩卖
  • 优化站点公司以前做的免费网站太多_新网站搜索不到
  • 域名 做网站和邮箱久久建筑服务网
  • 河北省建设执业资格注册管理中心网站称心的赣州网站建设
  • 个人网站可以做音乐下载网网站设计培训机构
  • 长沙自动化网站建设dw做网站地图
  • 阿里巴巴做网站么效果好企业营销型网站建设开发
  • 建一个网站需要什么潍坊医院网站建设
  • 网站建设项目规划书案例网站建设需要哪些企业资料