XNA系列教程 2D碰撞教程2:像素检测
2007-07-27 21:08
330 查看
2D碰撞教程2:像素检测
本教程详细讲解了像素碰撞检测的实现。注意 |
这个教程的代码是在前一个教程:2D碰撞教程1:矩形检测中实现的,在进行下面的教程前请确保已经完成教程1的学习。 |
绪论
在前一个例子当中,你已经通过举行碰撞检测实现了一个躲避下落物体游戏。而矩形只是通过你加载的纹理贴图的大小来决定的,并不能准确的代表你的游戏角色的大小,因此在游戏当中你会发现出现一些误差。例如,在这种情况下游戏角色并没有碰到下落的物体,但是背景却指示为游戏角色已经被下落的物体击中。这是由于在这种情况下两个纹理贴图出现了重合,而矩形的检测就认为两者已经产生了碰撞。
我们期望的情况应该如下图,在没有被下落物体击中,即便是纹理贴图相互重合也认为游戏角色没有被集中。
为了达到上述的目标,我们的代码必须能够做到只有在物体像素产生碰撞之后再响应碰撞,这个就叫做像素检测。
第一步:取得纹理数据
像素检测需要得到每一个纹理贴图的像素数据,为了访问每一个像素,我们必须调用Texture2D.GetData。通过这个方法你可以将纹理贴图的数据复制到你所定义的一个数组,当然数组的格式为默认的Color类型。1. 首先,你需要在game类中为每一个贴图声明Color数组。
|
|
第二步:像素检测的实现
现在你已经有了所需要的数据,那么根据这些数据你可以完成像素碰撞检测。这个方法首先需要一对纹理题图的包围矩形和他们的颜色数据。1. 首先,将下面的方法添加到你的代码当中。
|
3. 将下面的代码添加到IntersectPixels方法当中。
|
5. 将下面的代码依次添加如上面的方法。
|
注意 |
在教程1当中我们已经讲过纹理处理器会自动将洋红色转换为透明色。 |
第三步:调用像素碰撞检测
现在你已经完成了像素碰撞检测的方法,你需要在原有的举行碰撞的地方调用这个方法。1. 在Updata方法中修改代码如下。
|
恭喜你!
你现在已经掌握了像素碰撞检测的技能了。Ideas to Expand扩展
提供一下内容作为扩展。· 增加下落物体的大小和样式。
· 为游戏角色添加保护罩
· 添加奖励物品
点击这里下载源码
© 2007 Microsoft Corporation. All rights reserved.
Send feedback to xna@microsoft.com.
[align=center]© 2007 Vincent Zhang. 转载请注明.如果对翻译文章有疑问发送邮件至发送邮件至vinile@163.com[/align]
相关文章推荐
- [翻译]XNA系列教程 2D碰撞教程2:像素检测
- [翻译]XNA系列教程 2D 碰撞教程 1: 矩形检测
- XNA系列教程 2D 碰撞教程 1: 矩形检测
- XNA系列教程 2D碰撞教程3:转换物体的碰撞检测
- [翻译]XNA系列教程2D碰撞教程3:转换物体的碰撞检测
- cocos2d-x游戏开发系列教程-坦克大战游戏之坦克和地图碰撞的检测上
- 2D像素级碰撞检测
- cocos2d-x游戏开发系列教程-坦克大战游戏之坦克和地图碰撞的检测上
- 快速教程:在2D空间中使用四叉树实现碰撞检测
- XNA-2D碰撞-使用像素偵測
- xna像素的碰撞检测
- XNA中关于2D图形像素碰撞
- 教你如何为精灵绑定碰撞区【2D Toolkit 系列教程】
- cocos2d-x游戏开发系列教程-坦克大战游戏之坦克和地图碰撞的检测下
- cocos2d-x游戏开发系列教程-坦克大战游戏之所有坦克之间的碰撞检测
- cocos2d-x游戏开发系列教程-坦克大战游戏之子弹的碰撞检测处理
- cocos2d-x游戏开发系列教程-坦克大战游戏之坦克和地图碰撞的检测下
- cocos2d-x游戏开发系列教程-坦克大战游戏之所有坦克之间的碰撞检测
- cocos2d-x游戏开发系列教程-坦克大战游戏之子弹的碰撞检测处理
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(九) 2D游戏角色在地图上的移动