C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十一)地图遮罩层的实现
2009-06-22 08:32:35 来源:WEB开发网三个循环分别构建了上图中的三处障碍物,这几章都对它进行了修改,大家应该再熟悉不过了。接下来就是遮挡物那两棵树了,这里我用Image控件作为遮挡物的容器:
//创建遮罩层
Image Mask1 = new Image();
Image Mask2 = new Image();
private void InitMask() {
Mask1.Width = 238;
Mask1.Height = 244;
Mask1.Source = new BitmapImage((new Uri(@"MapMask1.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(@"MapMask2.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游戏辅助方面起着非常大的拓展作用,敬请关注。
Tags:开发 WPF Silverlight
编辑录入:爽爽 [复制链接] [打 印]- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››silverlight全屏显示图片
- ››Silverlight MVVM 模式(一) 切近实战
- ››开发者眼中的Windows Phone和Android
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››WPF学习笔记12. Binding (5)
- ››WPF学习笔记11. Binding (4)
- ››WPF学习笔记10. Binding (3)
- ››WPF学习笔记9. Binding (2)
- ››WPF学习笔记8. Binding
更多精彩
赞助商链接