|

楼主 |
发表于 2010-9-9 16:30:00
|
显示全部楼层
Re: [DirectX]2D游戏地形半透明遮挡问题。。
我现在打算把地形和建物分离出来,地形可能用矩形拼接,也可能直接用整图,但建物方面则把地图分割成N个菱形地图块,然后以此来检测碰撞以及遮挡。
参考图:(该图尺寸为1024×1024,版面所限,复制链接可以查看全图)

0:参考图说明
·上图中红色菱形框代表不可通行
·人物的脚部矩形RECT用于碰撞检测及遮挡检测
1:概述:
【地图场景】根据地形图素手工绘制或直接用整张图(我的地图与建物的设计有些不同,地形可能是用矩形拼的,也可能是整张图,而建物则是以菱形摆放的)
【地图信息文件】记录所有菱形地图块的属性:建物编号,是否可通行
【地图建物文件】由各个png格式的建物图片打包而成
【建物信息文件】保存所有建物数据:图片索引、宽高
【角色信息文件】保存所有角色的图片索引、8方向的碰撞矩形RECT
另外人物在地图中的XY坐标以人物图片左上角0,0为基准
2:渲染顺序
·渲染地形—第1层
·渲染人物—第2层
·渲染建物—第3层
·渲染人物的半透明遮挡部分
3:人物的碰撞检测
人物每走一个单位,就判断人物的碰撞矩形RECT所占据的所有菱形地图块,如果人物移动的目标位置周边均无障碍,则可通行,否则不可通行。
4:半透明遮挡检测
人物每行走一个单位,判断人物的碰撞矩形RECT所占据的地图块类型,然后找到该地图块在人物RECT的left的位置上最低障碍的bottom值(即,从人物碰撞矩形RECT的left处开始,向下找该地图块最低的碰撞RECT)如果该位置低于人物碰撞RECT的bottom值,则说明产生了遮挡,然后以半透明方式再次渲染该人物。
|
|