欢迎来到天天文库
浏览记录
ID:14417187
大小:50.00 KB
页数:10页
时间:2018-07-28
《rpg游戏通用开发工具——图形部分的处理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、RPG游戏通用开发工具——图形部分的处理1、图块库的结构图块库由图块索引和图块内容两部分构成。因为图块的字节长度是不固定的。图块索引的结构:每个索引的长度为一个int(4bytes);图块内容的结构:(1)8bytes的图块信息头typedefstruct{ shortblkwidth;//图块的宽度(以点阵来计算) shortblkhigh;//图块的高度(以点阵来计算) shortblkorx;//图块在X方向相对于绝对位置的偏移量 shortblkory; //图块在Y方向相对于绝对位置的偏移量}BlkInfo;(2)长度不固定的图块内容其结构是以行为
2、单位,进行处理的。它的每一行的结构 1byte nbytes画这一行需要阅读多少字节不定长度的线段内容 它的每个线段内容的结构1byte1bytenbytes相对于上次位置的偏移量这个线段共需要画多少个字节这个线段的具体内容 阅读图块的C语言算法voiddrawblk(char*dest)/*输入参数:dest-图块将展开成像素格式到这个目的缓冲区内*/{ BlkInfomInfo; //包含了这个图块的图块信息头 UCHARreadnum; //画这一行应该阅读多少字节 UCHARdrawnum; //每个线段所用掉
3、的字节数 UCHARusednum; //目前画过的线段已经用掉的字节数 char mx; //当前的线段应该画在的位置(相对于本图块的绝对位置) int offset;//因为dest是连续的内存,不分宽度和高度的,需要 //一个变量来计算画点到dest的偏移量。 LPSTRlpBlk; //指向本图块的开始位置的指针 shorty=mInfo.blkhigh-1;//实际需要画的行数 int bufWidth; //dest接收的宽度(是为了兼容标准位图的标准格式) //在这里可以
4、认为等于mInfo.blkwidth int i; for(i=0;i5、 lpBlk++; //指针指向了即将画出的线段的 //实际字节数 drawnum=*lpBlk; //取得即将画出的线段的实际字节数 lpBlk++; //指针指向了即将画出的线段的 //实际内容 offset=y*bufWidth+mx; //计算应该拷贝到dest的那个位置 memcpy(lpDIBits+offset,lpBlk,6、drawnum); //到dest的内存拷贝 usednum=usednum+drawnum+2; //计算已经画出的线段用了多少 //字节 lpBlk=lpBlk+drawnum; //指向下一个即将画出的线段 } y--; //标准位图是从最后一行开始算起的 } } 注意:只是为了说明图块的解码方法。对于转化成标准内存位图,需要宽度边界的判断。对于直接写入屏幕缓冲区,还需要进行是否超过缓冲区边界的判断。2、阅读图块库的类-CBlkLibApi的数据7、和函数成员classCBlkLibApi{public: CBlkLibApi(); virtual~CBlkLibApi();protected: CPalette*pPal; //char*blkBuffer; HBLKblkHandle; //UINT*idxBuffer; HBDXidxHandle; CListidxList; intblkNumber; CStringpalFileName;public: BOOLEANExportBlk(intindex,CFile&file); //把指定编号的图块输出成标准位图格式 8、BOOLEANLoadBlkLibFi
5、 lpBlk++; //指针指向了即将画出的线段的 //实际字节数 drawnum=*lpBlk; //取得即将画出的线段的实际字节数 lpBlk++; //指针指向了即将画出的线段的 //实际内容 offset=y*bufWidth+mx; //计算应该拷贝到dest的那个位置 memcpy(lpDIBits+offset,lpBlk,
6、drawnum); //到dest的内存拷贝 usednum=usednum+drawnum+2; //计算已经画出的线段用了多少 //字节 lpBlk=lpBlk+drawnum; //指向下一个即将画出的线段 } y--; //标准位图是从最后一行开始算起的 } } 注意:只是为了说明图块的解码方法。对于转化成标准内存位图,需要宽度边界的判断。对于直接写入屏幕缓冲区,还需要进行是否超过缓冲区边界的判断。2、阅读图块库的类-CBlkLibApi的数据
7、和函数成员classCBlkLibApi{public: CBlkLibApi(); virtual~CBlkLibApi();protected: CPalette*pPal; //char*blkBuffer; HBLKblkHandle; //UINT*idxBuffer; HBDXidxHandle; CListidxList; intblkNumber; CStringpalFileName;public: BOOLEANExportBlk(intindex,CFile&file); //把指定编号的图块输出成标准位图格式
8、BOOLEANLoadBlkLibFi
此文档下载收益归作者所有