C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十五)完美捕捉精灵之神器 -- HitTest
2010-09-30 20:48:15 来源:WEB开发网核心提示: 这么短短一句话即实现了最简易的精灵对象捕获,我们先来测试一下程序:细心的朋友会发现,C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十五)完美捕捉精灵之神器 -- HitTest(3),虽然是勉强实现了但这其实并不准确;因为当鼠标并不在怪物实体上时,鼠标仍
这么短短一句话即实现了最简易的精灵对象捕获,我们先来测试一下程序:
细心的朋友会发现,虽然是勉强实现了但这其实并不准确;因为当鼠标并不在怪物实体上时,鼠标仍然会显示为1号光标(如下图),是代码出问题了吗?
其实问题并非出在代码上,这是因为精灵的图片源是背景透明的PNG或GIF格式图片,就拿上图中的“绝对无敌”来说吧,它的每帧图片为200*200尺寸(如下图),
它的有效实体只是该图片的中间区域,而它的旁边有着比较大面积的透明无效区域,虽然在显示上透明区域是不会显示出来的,但是它整个作为200*200尺寸的Image类型控件而存在。因此当鼠标在游戏窗体上移动时,只要处于这200*200区域内时均会显示为1号光标而并不会理睬它是否停留在精灵的有效实体部分。
精灵的图片源均为位图类型,目前我暂时还未发现在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
更多精彩
赞助商链接