C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十五)完美捕捉精灵之神器 -- HitTest
2010-09-30 20:48:15 来源:WEB开发网具体意思就是在精灵身体图片不透明区域进行外发光:蓝色,5像素宽,无噪音,完整透明度。其运行效果如下图:
看到这张图的时候或许大家开始有些欣喜若狂了,但是我想告诉大家:此方法绝对的行不通,为什么?一方面此方法只能在WPF中使用,它的原理是时时动态查找图片不透明区域的边缘,然后对边缘路径进行发光滤镜处理;而另一方面由于它是对图片源不透明区域进行时时的边缘查找,将极大的占用游戏的界面线程资源,是极其不友好的表现方式。
因此,为了同时适应WPF/Silverlight,我使用第二种方法作为最终解决方案。这种方法实现起来简单多了,只需要在前面代码的基础上加进行如下更改:
private void Window_MouseMove(object sender, MouseEventArgs e) {
……
if (SpiritList.Count > 0) {
bool targetIsFound = false;
for (int i = 0; i < SpiritList.Count; i++) {
if (!targetIsFound && isEfficaciousSection(SpiritList[i].EfficaciousSection, e.GetPosition(SpiritList[i]))) {
this.Cursor = Super.getCursor(1);
SpiritList[i].Opacity = 0.6;
targetIsFound = true;
label3.Content = SpiritList[i].Name;
} else {
if (!targetIsFound) { this.Cursor = Super.getCursor(0); }
SpiritList[i].Opacity = 1;
}
}
}
}
在鼠标移动事件中仅仅增改6行代码即可以轻松的实现,运行效果如下:
到此为止即完美实现了对精灵的精确捕获。忽忽,是不是感觉向完整的游戏框架目标又迈出了一大步?
在此,我还想对那些极端的朋友说一下:由于目前暂时采用多线程结构,在单核CPU电脑以及Win2003以前的操作系统上运行时,怪物密集的地方会有些卡。但是这根本代表不了游戏引擎的最终性能,教程还有非常非常多的内容没有讲到,优化的技术还在后面呢,太多了就不一一罗列了,大家应该都明白本系列既然取名为教程,代表的就是一个由浅入深的过程,很多人连基础原理都没弄清楚,源码对你有何意义?
小结:HitTest功能强大到几乎无所不能,它是我们实现打怪与施放魔法的前提条件。下一节我将讲解精灵面板界面,以及精灵3大基本属性(生命、魔力、经验值)表现形式的实现方法,敬请关注。
出处:http://alamiye010.cnblogs.com/
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
更多精彩
赞助商链接