斜二视图:斜视角视图( 4)

我们现在有了我们预步进坐标当我们准备用mx和my来从地图中绘制图形块时我们向左移动prestep_x个象素点向上移动prestep_y个象素点

OK我们现在得到了个平滑滚动可以考虑加入精灵问题了你不能用这个技术绘制个精灵他们不可能排布在个16x16地图内个精灵可能会被别绘制图形块覆盖所以我们需要是能够在任意坐标位置上绘制我们精灵我们所要做就是给我们引擎加入能在层上绘图能力
这里加入个图形块绘制顺序你首先绘制平整地面对象比如草地然后回来绘制它上面东西等等注意那些大对象诸如高墙需要画在同层里它们被当作同个对象看起来这很难考虑但如果你不想保留个zbuffer那么这确是需要就用位来工作你最终会理解它

所以我们现在得在我们结构上加入个层:

struct MAP_STRUCTURE {
char num_tiles;
char tiles[10]; // 假设每个地图坐标上最多绘制10个图形块
char height[10]; // 也假设为10
char layer[10]; // 同上
};
MAP_STRUCTURE map[10][10];

现在把下面这些加到地图数据中:

map[0][0].layer[0] = 1;
map[0][0].layer[1] = 1;
...
map[1][1].layer[0] = 0;
...

现在使用个这样循环来绘制:(C语言)

current_layer = 0;
max_layers = 0;

while(1) {
for(i=0;i<10;i) {
for(j=0;j<10;j) {
for(k=0;k<map[i][j].num;k) {
(map[i][j].layer current_layer) {
// 绘制图形块
}

(map[i][j].layer > max_layers)
max_layers = map[i][j].layer;
}
}
}
current_layer;
(current_layer >= max_layers)
;
}

现在你所要做切就是将你要在特定层上绘制精灵地图坐标和屏幕坐标联系起来并绘制它你可以通过比较当前绘制图形块坐标和精灵地图坐标x和y来实现:
(sprite_x和sprite_y是所要绘制精灵精美坐标)
(mx和my是当前要绘制地图坐标)

(mx sprite_x / 16 && my sprite_y / 16) {

然后你只要在这个位置上绘制精灵的前将精灵偏移个位置就行了:

xo = sprite_x & 15;
yo = sprite_y & 15;
xx = xo - yo;
yy = (xo/2) + (yo/2);
block_draw(sprite_num,screenx-32+xx,screeny-16+yy);

好了现在就留给你们去得到你们在斜视角视图中新发现知识了如果你有任何问题或建议请发EMAIL或者慢信给我


Jim Adams
Game Developers Network, Inc
1200 N Lamb Ste#124
Las Vegas, NV 89110
EMAIL: [email protected]


(完)
Tags:  三视图 四视图 四棱锥的三视图 斜二视图

延伸阅读

最新评论

发表评论