文字逐字上屏的实现(C代码)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

文字逐字上屏的实现(C代码)

最近突发奇想,想写一个小游戏《迷宫乐翻天》(下载地址:http://ggg82.go.nease.net/soft/migong.rar),游戏写好了,总觉得太单调,向在开始时设置一个问题逐字上屏的特效,琢磨了好半天,最终完成任务,拿出来与大家共享。

要文字逐字上屏,要计算好每个文字的宽度,每输出一个字后然后进行适当的延时。效果就出来了。纯粹的文字叙述不是最好的展示,就让代码说话吧!

void StepText(HDC hdc,RECT *rc,char *str)//文字逐字显示

{

int len=strlen(str);//计算字符串的长度

int posx;//当前字符位置

int posy=rc->top;

SIZE size;//存储每个字符的宽高

SetTextAlign(hdc,TA_UPDATECP|TA_LEFT|TA_TOP);//设置自动更新文字位置

while(len>0)

{

posx=rc->left;

MoveToEx(hdc,rc->left, posy,NULL);//移动到行首

while(len>=0)

{

int t;

if((str[0])<0) t=2;//中西字符辨别

else t=1;

GetTextExtentPoint32(hdc,str,t,&size);//获取字符宽高

if(posx+size.cx>rc->right) break;//若超出边界

posx+=size.cx;//更新当前位置

TextOut(hdc,0,0,str,t);//输出字符

str+=t;//更新字符

len-=t;//更新字符长度

if(len<=0) break;//若字符输出完毕

Sleep(60*t);//延时

}

posy+=size.cy; //进行移行处理

if((posy+size.cy+ size.cy)>=rc->bottom)//下一行无法书写,进行滚屏

{

RECT rect=*rc;

rect.top+=size.cy;//滚屏位置

ScrollDC(hdc,0,-size.cy,&rect,NULL,NULL,NULL);

posy-=size.cy; //恢复移行处理

}

}

}

好了,就这么简单,用vc生成一个Hello Word程序实例,将该代码加入,执行命令调用一下,效果还满意吧!

欢迎访问我的个人主页:http://ggg82.126.com 电子信箱:ggg82@126.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航