|
发表于 2004-7-8 22:41:00
|
显示全部楼层
Re:请教地图编辑器的写法
看了华山兄的文章后,想说说自己的看法
我的想法是这样,
//假设 8x8的TILE
#define TILE_W 8
#define TILE_H 8
struct mapdata
{
unsigned short tileno; //在所使用的TILE表面上的第tileno号TILE
unsigned char hflip:1; //这个TILE有横向翻转
unsigned char vflip:1; //有纵向翻转
unsigned char layer:6; //表示所使用的TILE层(最多可以有 64层)
}mapdata;
(看了华山兄的文章后,想说说自己的看法
我的想法是这样,
//假设 8x8的TILE
#define TILE_W 8
#define TILE_H 8
struct mapdata
{
unsigned short tileno; //在所使用的TILE表面上的第tileno号TILE
unsigned char hflip:1; //这个TILE有横向翻转
unsigned char vflip:1; //有纵向翻转
unsigned char layer:6; //表示所使用的TILE层(最多可以有 64层)
}mapdata;
(大小移动是 2+1=3个字节)
tile是一个固定大小的DDS表面,而且必须是"标准"大小的(长宽必须是TILE宽的倍数),而tile的编号
是按照大小,从左到右从上到下进行编号的,所以只要有编号和所用图片的长宽,就能很容易的得到
所指TILE的 RECT.
华山兄考虑到MAP上会有事件等信息,想法是不错,不过呢,一个地图上这些信息相对来说还是少数
如果直接放在MAP数据里面,会浪费宝贵的空间和速度.
最后的场景文件里的数据应该是这样的:
struct SCFILE
{
int map_w; //地图长宽 (tile宽的倍数)
int map_h;
char tilename[64]; //所用到的N层TILE图片的名字列表
Event events; 事件,陷阱等一切消息
int eventNum; 事件数量
}SCFILE;
这个结构以后,就是sizeof(mapdata)*map_w*map_h的MAP数据
和一个 sizeof(Event)*eventNum的数据.
在程序读盘的时候,只要按照顺序,先读结构,然后读一定长度的MAP数据和
事件数据,
最后将 tilename里的那些DDS,根据MAP数据,裁减,渲染.
就可以还原整个关卡.
在下拙见,欢迎讨论 |
|