原著:乐水
inline void putpixel(BITMAP bmp,int x,int y,u8 col) { u16 *tc; tc=bmp.dat+(y)*(bmp.w>>1)+(x>>1); if(x&1)*tc=((*tc&255)+(col<<8)); else *tc=(*tc&65280)+col; }
下面的是显示汉字的主体部分了, struct ChinaHzk{ short len; const u8 *CHzkBuf,*AHzkBuf; char Loadhzk,HZK; ChinaHzk(); }ChinaHzk; ChinaHzk::ChinaHzk() {CHzkBuf=_CHzkBuf; AHzkBuf=_AHzkBuf;//这两个指针在rhzk程序转换后的.h中定义 } void hzput(int x,int y,int col,BITMAP bitmap1) { u8 dot; register int i,j,k,mask; if(ChinaHzk.HZK){ for(i=0;i<=15;i++) {for(j=0;j<=1;j++) { dot=*ChinaHzk.CHzkBuf++; mask=0x80; for(k=0;k<=7;k++) {if(dot&mask) putpixel(bitmap1,x+j*8+k,y+i,col); mask>>=1; } } }
}else for(i=0;i<=15;i++) { dot=*ChinaHzk.AHzkBuf++; mask=0x80; for(k=0;k<=7;k++) {if(dot&mask) putpixel(bitmap1,x+k,y+i,col); mask>>=1; } } ChinaHzk.HZK=1; } //显示字符 void textout(BITMAP bitmap1,char *Str,int x,int y,unsigned char col) { register unsigned long offset1; int oldx; const u8 *_bakCHzkBuf,*_bakAHzkBuf;
_bakCHzkBuf=ChinaHzk.CHzkBuf; _bakAHzkBuf=ChinaHzk.AHzkBuf; oldx=x; while(*Str) {if(*Str==’\n’){y+=17;x=oldx;*Str++;continue;} if(*Str==’ ’){x+=8;*Str++;continue;}
if(!(*Str&0x80)){ offset1=*Str<<4; ChinaHzk.HZK=0; ChinaHzk.AHzkBuf+=offset1; hzput(x,y,col,bitmap1); if(x+8+ChinaHzk.len<bitmap1.w) {x+=(8+ChinaHzk.len);} else {y+=17;x=oldx;} Str++; ChinaHzk.HZK=1; ChinaHzk.AHzkBuf=_bakAHzkBuf; continue;} offset1=(unsigned int)((((*Str+95)<<6)+((*Str+95)<<5))- ((*Str+95)<<1)+(*(Str+1)+95))<<5; ChinaHzk.CHzkBuf+=(unsigned int)(offset1-778240); hzput(x,y,col,bitmap1); if(x+16+ChinaHzk.len<bitmap1.w) {x+=(16+ChinaHzk.len);} else {y+=17;x=oldx;} Str+=2; ChinaHzk.CHzkBuf=_bakCHzkBuf; } } //显示字符 void OutText(BITMAP bitmap,int x,int y,char *str,...) { va_list ptr;char *strr; strr=(char*)malloc(strlen(str)+2); va_start(ptr,str); vsprintf(strr,str,ptr); va_end(ptr); textout(bitmap,strr,x,y,_COLOR); free(strr); }
你可以直接使用textout来显示也可以用OutText显示 变量-》字符 这样的信息,例: OutText(screen,100,100,"X=%d,Y=%d",x,y); 有了这些基本函数,我想你已经可以写出一些东西来了,更多的资料请下载我写的函数库 也许你看了这些会觉得有些眼熟,是的,如果你以前曾用过我写的游戏开发库Beauty的话,会发现基本上代码没有改变,而我当初也的确是有着样的想法, 即使在不同的平台上,不同的系统但使用一套相似的开发库进行开发可以为以后的移植工作省下很大力气。我在进行gba程序编写时就一直在使用Beauty库做测试相比之下要比用gba模拟器方便的多。
|