XNA学习笔记——Tile Map的碰撞检测
来源:互联网 发布:外国人 汉字 知乎 编辑:程序博客网 时间:2024/05/22 16:03
如图所示,ABCD是四个相邻的tile,中间靠左深色矩形是角色矩形原先所处的位置,中间红色矩形是角色移动一定距离后所处的位置(先假设能够移动,相当于反证法),它的右上角和右下角分别是a点和b点,两个椭圆表示该tile中有障碍物存在。现在就讲一下大概的思路。
角色能不能移动,就看移动一定距离后,a点和b点所在的tile中有没有障碍物的存在,如果有,则不能移动。
Point tile1表示的是移动后的角色矩形的左上角所在的tile坐标(不是像素值);Point tile2表示的是移动后的角色矩形的右下角所在的tile坐标(不是像素值),其实离右下角还差一个像素,这样做的原因后面会叙述。之后的for循环就是检测B和D中有无障碍物。
假如角色矩形刚好处于A的位置,B中没有障碍物,D中有障碍物。如果不减去一个像素,那么角色矩形的右下角刚好是ABCD的中心,它的tile坐标会是D所在的tile坐标(通过VectorToCell方法计算)。按设想,B中无障碍物,D中有障碍物,角色矩形处于A位置,是可以靠近B的,D不能影响,所以减去一个像素,使得tile2的tile坐标仍然是角色矩形左上角所在的tile坐标。其他三个方向也是如此。
在设置角色的移动速度时,移动速度最好能够整除tile的宽度,比如tile的宽度为32,那么移动速度设为2或4等,这样不会产生死角(角色被困住,无法向其他方向移动)。
现在碰到一个问题,没有解决。按下方向键,角色移动的距离是速度的倍数,比如设置速度为2,但由于按下方向键的时间长短不一,移动的距离可能为4,8,12等。如果地图的某个地方有一扇门,有时候会出现走过头,退回来又退多了的情况。要是把按键改成按下再抬起,虽然每次的移动距离一定,但角色走的有点“慢”。
- XNA学习笔记——Tile Map的碰撞检测
- xna像素的碰撞检测
- 学习XNA游戏编程2:用户输入和碰撞检测
- Direct3D学习笔记(四)——碰撞检测(Bounding Box)
- PolygonSoup碰撞检测学习笔记
- Unity3D学习笔记 碰撞检测
- cocos2d-x系列笔记—瓦块的碰撞检测
- XNA学习笔记——线、三角形的绘制
- XNA学习笔记——SpriteBatch.Begin的Matrix参数
- XNA学习笔记——SpriteBatch.Draw的layerDepth
- XNA学习笔记——SpriteBatch.Draw的origin参数
- XNA系列教程 2D碰撞教程3:转换物体的碰撞检测
- XNA学习笔记——相机设置
- XNA中的拾取与碰撞检测
- 碰撞检测 包围盒 包围球 XNA
- Kibana的图形化——Tile Map
- Kibana的图形化——Tile Map
- 碰撞检测—云风的分析
- 位运算之美——用+,-和位运算实现正整数除法和取模(一)
- c++指针的使用总结——开始菜鸟之路!
- 摄像头接线 SM9C120A 1605
- winio 模拟按键(无PS2键盘,未测试)
- C++中 Static作用和使用方法(改正)
- XNA学习笔记——Tile Map的碰撞检测
- 孔子见老子
- JDK自带的native2ascii工具完全揭密
- 2010年8月23号安排
- Linux的free命令详解
- 转贴: 【python】使用zlib进行压缩解压
- [个人管理]一位技术人员成长的烦恼及我的分析
- 服务器新问题:连接不上
- 2222