|
发表于 2016-4-18 15:51:41
|
显示全部楼层
有的游戏是用菱形块为单为,设定障碍,以及设定遮挡层级的
因为游戏场景都是斜45度的视角,也就是说,大部分的物件都是斜着的,那么用菱形块就比较适合。
(不过我个人觉得用矩形块也问题不大,菱形块构建起来很复杂.)
然后遮挡顺序的问题,
我一时说不清楚,给你点提示,有一种做法是这样:
首先,定义物件的层级,比如,地图背景是第1层,地表上的植被是第2层,花草,建筑,树等是第3层,场景特效是第4层,等等,层级高的必定遮挡层级低的,至于一个物件是属于哪一个层,由编辑器指定,你同样可以将一个建筑物设为最高层,设置比怪物层级还高,这样,怪物永远会被这个建筑物遮挡住,通过这个技巧可以实现一些特殊效果.
还有,这个层级可能会随着游戏的内容而发生变化,比如一个怪物,当他死亡之后,他的层级就必须降低,以使其他怪物和人物始终遮挡住他,这样就会比较真实,因为尸体总是被人踩在上面的...
然后,相同层级之间也需要确定前后遮挡关系,那么需要为每个物件标出两个点(一个点等于一个菱形块,当然,也可以设定为像素),由这两个点连成一条直线,在直线上面的,就被该物件遮挡,在直线下面的,就遮挡该物件.这两个点也可以是相同位置(即,同一个菱形块),那这就是相当于画家算法里的Y值, 就是说,程序里需要计算点和直线的前后关系,或者是直线和直线的前后关系,来确定到底谁遮挡谁。
明白么?
如果不想这么复杂,做个简单的,也能做出效果,就是所有物件都有一个Y值,比如怪物的Y值就是脚的位置处,然后比较这个Y,Y小的,就会被遮挡. 就是一个map<int, 物件> key为Y值, 按map的顺序画就OK.
先画地图背景,再画所有怪物人物,最后画所有遮挡图.
|
|