Java图形程序中的对话逐字显示实现

在现代,摒弃传统的会话方式,很多的图形广告或游戏采用了[逐字打印]的效果来展示文字,当然,这样做的目的无非是为了突出内容或吸引眼球。

但是这种实现方式却是值得借鉴的,以下,我给出一个JAVA实现的简单用例,需要者可以自行扩充。

代码实现:

Java图形程序中的对话逐字显示实现packageorg.test;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
importjava.awt.Color;
Java图形程序中的对话逐字显示实现
importjava.awt.Font;
Java图形程序中的对话逐字显示实现
importjava.awt.Frame;
Java图形程序中的对话逐字显示实现
importjava.awt.Graphics;
Java图形程序中的对话逐字显示实现
importjava.awt.Image;
Java图形程序中的对话逐字显示实现
importjava.awt.Panel;
Java图形程序中的对话逐字显示实现
importjava.awt.image.BufferedImage;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
importorg.loon.framework.game.helper.ImageHelper;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
/***//**
Java图形程序中的对话逐字显示实现*<p>
Java图形程序中的对话逐字显示实现*Title:LoonFramework
Java图形程序中的对话逐字显示实现*</p>
Java图形程序中的对话逐字显示实现*<p>
Java图形程序中的对话逐字显示实现*Description:JAVA实现对话逐字打印(由Loonframework提供)
Java图形程序中的对话逐字显示实现*</p>
Java图形程序中的对话逐字显示实现*<p>
Java图形程序中的对话逐字显示实现*Copyright:Copyright(c)2007
Java图形程序中的对话逐字显示实现*</p>
Java图形程序中的对话逐字显示实现*<p>
Java图形程序中的对话逐字显示实现*Company:LoonFramework
Java图形程序中的对话逐字显示实现*</p>
Java图形程序中的对话逐字显示实现*
Java图形程序中的对话逐字显示实现*
@authorchenpeng
Java图形程序中的对话逐字显示实现*@email:[email protected]
Java图形程序中的对话逐字显示实现*
@version0.1
Java图形程序中的对话逐字显示实现
*/

Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
publicfinalclassWriterTypeextendsPanelimplementsRunnable...{
Java图形程序中的对话逐字显示实现
//最大对话数
Java图形程序中的对话逐字显示实现
privateint_MAX_COUNT=10;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
//间隔标记
Java图形程序中的对话逐字显示实现
privatechar_flag='|';
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privateImage_screen;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privateGraphics_bg;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privateThread_L_WriterType;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privatestaticColor_L_fClr;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privatestaticColor_L_bClr;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privatestaticString_M_Text[];
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privateint_S_COUNT;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privateFont_L_TTF;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privateint_L_Speed;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privateint_L_Delay;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privateString_C_Text[];
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privatestaticint_L_COUNT;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privatestaticint_F_COUNT;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privatestaticint_T_COUNT;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privatestaticint_N_Text;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privateString_FontName;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privatefinalstaticint_WIDTH=500;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privatefinalstaticint_HEIGHT=375;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privatestaticint_FontStyle;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privatestaticint_FontSize;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privatestaticImage_back=null;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
/***//**
Java图形程序中的对话逐字显示实现*
Java图形程序中的对话逐字显示实现
*/

Java图形程序中的对话逐字显示实现
privatestaticfinallongserialVersionUID=1L;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
privateboolean_isRun;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
/***//**
Java图形程序中的对话逐字显示实现*析构函数,注入背景图,循环显示的文字数组,速度,延迟
Java图形程序中的对话逐字显示实现*
@paramimg
Java图形程序中的对话逐字显示实现*
@paramstrContent
Java图形程序中的对话逐字显示实现*
@paramspeed
Java图形程序中的对话逐字显示实现*
@paramdelay
Java图形程序中的对话逐字显示实现
*/

Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
publicWriterType(Imageimg,String[]strContent,intspeed,intdelay)...{
Java图形程序中的对话逐字显示实现init(img,strContent,speed,delay);
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
privateWriterType()...{
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
publicvoidinit(Imageimg,String[]strContent,intspeed,intdelay)...{
Java图形程序中的对话逐字显示实现
//初始背景色
Java图形程序中的对话逐字显示实现
setBackground(Color.BLACK);
Java图形程序中的对话逐字显示实现
//原始对话信息
Java图形程序中的对话逐字显示实现
_M_Text=newString[_MAX_COUNT];
Java图形程序中的对话逐字显示实现
//缓存对话信息
Java图形程序中的对话逐字显示实现
_C_Text=newString[_MAX_COUNT];
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现_back
=img;
Java图形程序中的对话逐字显示实现_FontName
="宋体";
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现_FontStyle
=0;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现_FontSize
=15;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现_L_TTF
=newFont(_FontName,_FontStyle,_FontSize);
Java图形程序中的对话逐字显示实现_L_bClr
=Color.BLACK;
Java图形程序中的对话逐字显示实现_L_fClr
=newColor(250,250,250);
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
intlength=strContent.length;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
//循环次数
Java图形程序中的对话逐字显示实现
_N_Text=strContent.length-1;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
//直接copyString数组
Java图形程序中的对话逐字显示实现
System.arraycopy(strContent,0,_M_Text,0,length);
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
//速度及延迟设定
Java图形程序中的对话逐字显示实现
_L_Speed=speed;
Java图形程序中的对话逐字显示实现_L_Delay
=delay;
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
//缓存区域
Java图形程序中的对话逐字显示实现
_screen=newBufferedImage(_WIDTH,_HEIGHT,1);
Java图形程序中的对话逐字显示实现_bg
=_screen.getGraphics();
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
//开启线程
Java图形程序中的对话逐字显示实现
_isRun=true;
Java图形程序中的对话逐字显示实现_L_WriterType
=newThread(this);
Java图形程序中的对话逐字显示实现_L_WriterType.start();
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
/***//**
Java图形程序中的对话逐字显示实现*停止线程
Java图形程序中的对话逐字显示实现*
Java图形程序中的对话逐字显示实现
*/

Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
publicvoidstop()...{
Java图形程序中的对话逐字显示实现_S_COUNT
=0;
Java图形程序中的对话逐字显示实现_L_COUNT
=0;
Java图形程序中的对话逐字显示实现_F_COUNT
=0;
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
if(_L_WriterType!=null)...{
Java图形程序中的对话逐字显示实现_isRun
=false;
Java图形程序中的对话逐字显示实现_L_WriterType
=null;
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
/***//**
Java图形程序中的对话逐字显示实现*绘制图形
Java图形程序中的对话逐字显示实现
*/

Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
publicvoidpaint(Graphicsg)...{
Java图形程序中的对话逐字显示实现_bg.setColor(_L_bClr);
Java图形程序中的对话逐字显示实现_bg.fillRect(
0,0,_WIDTH,_HEIGHT);
Java图形程序中的对话逐字显示实现_bg.setColor(_L_fClr);
Java图形程序中的对话逐字显示实现_bg.setFont(_L_TTF);
Java图形程序中的对话逐字显示实现_bg.drawImage(_back,
0,0,this);
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
for(inti=0;i<=_L_COUNT;i++)...{
Java图形程序中的对话逐字显示实现
//转换当前字体top位置
Java图形程序中的对话逐字显示实现
Doubletop=newDouble((double)_FontSize
Java图形程序中的对话逐字显示实现
*(3.0D+2.0D*(double)i));
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
if(_C_Text[i]!=null)...{
Java图形程序中的对话逐字显示实现_bg.drawString(_C_Text[i],
50,top.intValue());
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现g.drawImage(_screen,
0,0,this);
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
/***//**
Java图形程序中的对话逐字显示实现*图形变更
Java图形程序中的对话逐字显示实现
*/

Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
publicvoidupdate(Graphicsg)...{
Java图形程序中的对话逐字显示实现paint(g);
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
/***//**
Java图形程序中的对话逐字显示实现*重新开始
Java图形程序中的对话逐字显示实现*
Java图形程序中的对话逐字显示实现
*/

Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
privatevoidbegin()...{
Java图形程序中的对话逐字显示实现
//清除所有缓存数据。
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
for(inti=0;i<_C_Text.length;i++)...{
Java图形程序中的对话逐字显示实现_C_Text[i]
=null;
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现_F_COUNT
=0;
Java图形程序中的对话逐字显示实现_S_COUNT
=0;
Java图形程序中的对话逐字显示实现_L_COUNT
=0;
Java图形程序中的对话逐字显示实现_T_COUNT
++;
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
if(_T_COUNT>_N_Text)...{
Java图形程序中的对话逐字显示实现_T_COUNT
=0;
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现repaint();
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
publicvoidrun()...{
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
while(_isRun)...{
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
try...{
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
//字符串累加
Java图形程序中的对话逐字显示实现
_S_COUNT++;
Java图形程序中的对话逐字显示实现
//当字符串完成整段对话时
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
if(_S_COUNT==_M_Text[_T_COUNT].length())...{
Java图形程序中的对话逐字显示实现_C_Text[_L_COUNT]
=_M_Text[_T_COUNT].substring(_F_COUNT,
Java图形程序中的对话逐字显示实现_S_COUNT);
Java图形程序中的对话逐字显示实现begin();
Java图形程序中的对话逐字显示实现Thread.sleep(_L_Delay);
Java图形程序中的对话逐字显示实现repaint();
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
//比对标识设定缓存对话
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
if(_M_Text[_T_COUNT].charAt(_S_COUNT)!=_flag)...{
Java图形程序中的对话逐字显示实现_C_Text[_L_COUNT]
=_M_Text[_T_COUNT].substring(_F_COUNT,
Java图形程序中的对话逐字显示实现_S_COUNT)
Java图形程序中的对话逐字显示实现
+"_";
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现}
else...{
Java图形程序中的对话逐字显示实现_C_Text[_L_COUNT]
=_M_Text[_T_COUNT].substring(_F_COUNT,
Java图形程序中的对话逐字显示实现_S_COUNT);
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
//用以分辨是否转化对话组时的不同延迟
Java图形程序中的对话逐字显示实现
booleanshortSleep;
Java图形程序中的对话逐字显示实现
//当'|'标识存在时执行
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
if(_M_Text[_T_COUNT].charAt(_S_COUNT)==_flag)...{
Java图形程序中的对话逐字显示实现_L_COUNT
++;
Java图形程序中的对话逐字显示实现_S_COUNT
++;
Java图形程序中的对话逐字显示实现_F_COUNT
=_S_COUNT;
Java图形程序中的对话逐字显示实现shortSleep
=true;
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现}
else...{
Java图形程序中的对话逐字显示实现shortSleep
=false;
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
//刷新
Java图形程序中的对话逐字显示实现
repaint();
Java图形程序中的对话逐字显示实现
//判断速度
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
if(!shortSleep)...{
Java图形程序中的对话逐字显示实现Thread.sleep(_L_Speed);
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现}
else...{
Java图形程序中的对话逐字显示实现Thread.sleep(
10*_L_Speed);
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现}
catch(InterruptedExceptione)...{
Java图形程序中的对话逐字显示实现stop();
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
publicintgetMaxCount()...{
Java图形程序中的对话逐字显示实现
return_MAX_COUNT;
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
publicvoidsetMaxCount(intmax_count)...{
Java图形程序中的对话逐字显示实现_MAX_COUNT
=max_count;
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现
publicstaticvoidmain(String[]args)...{
Java图形程序中的对话逐字显示实现Java图形程序中的对话逐字显示实现String[]abracadabra
=newString[]...{
Java图形程序中的对话逐字显示实现
"身为剑体,|钢铁之血灼璃之心.|手创千剑,身经百战;|无一败绩,无一知己.|常一人自醉于剑丘之巅;|此生亦无任何意义;|故此身,定为无限剑成;|故此命,定为无限剑制.",
Java图形程序中的对话逐字显示实现
"Iamtheboneofmysword;|Steelismybody,andfireismyblood.|Ihavecreatedoverathousandblades.|Havewithstoodpaintocreatemanyweapons.|Yet,thosehandswillneverholdanything.|SoasIpray,unlimitedbladeworks."}
;
Java图形程序中的对话逐字显示实现Framefrm
=newFrame();
Java图形程序中的对话逐字显示实现frm.setTitle(
"Java图形程序中的对话逐字显示(由Loonframework提供)");
Java图形程序中的对话逐字显示实现frm.setSize(_WIDTH,_HEIGHT
+20);
Java图形程序中的对话逐字显示实现frm.setResizable(
false);
Java图形程序中的对话逐字显示实现frm.add(
newWriterType(ImageHelper
Java图形程序中的对话逐字显示实现.loadImage(
"d:/back.jpg",true),abracadabra,50,5000));
Java图形程序中的对话逐字显示实现frm.setVisible(
true);
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现
Java图形程序中的对话逐字显示实现}

Java图形程序中的对话逐字显示实现

本例自动循环String数组中所有数据,每行显示对话由'|'标记分割,背景图如下:

Java图形程序中的对话逐字显示实现

效果图1如下:
Java图形程序中的对话逐字显示实现

效果图2如下:
Java图形程序中的对话逐字显示实现