快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

巴黎人官网手机版:游戏开发小技巧低级界面下的文本自动换行



在利用中,无意偶尔候必要显示大年夜段的翰墨。如游戏中的赞助信息,以及RPG游戏的人物对白。对付这种大年夜量翰墨的显示,我们会很自然地想到应用高档界面的Form来显示,好处便是简单方便,我们不用去费神翰墨的断行排版,Form会为你搞定统统。

然则,无意偶尔候我们无法应用高档界面,如游戏规定必须应用初级界面,再有便是RPG类的游戏也是必须要应用初级界面来显示对白的。

应用初级界面显示大年夜段翰墨,关键在于你要把它给排好版。最直接的问题便是:一行可以显示几个字?

很多人这样做:经由过程真机(必须用真机,模拟器不可的,会有差异)丈量好一行能显示几个字,比如巴黎人官网手机版说7个。然后把大年夜段的翰墨分成7个一行,变成了一个字符串数组,如:

final String[] strGameHelp = {

"年份不详的一个",

"期间中,妖与人",

"类都存在于天下",

"上,并基础为对",

"立状态,然则不",

"扫除有相处一路",

"的可能,由于人",

"类基础已经吸收",

"天下上有妖的事",

"实了。"

};

有了这么一个字符串数组,我们就可以轮回把它画出来:

for(int i=0;i6){

vector.addElement(str.substring(0,CharacterNumber));

str = str.substring(CharacterNumber);

}

else{

vector.addElement(str);

str = "";

}

}

return vector;

}

再把赞助信息改一改:

final String strGamehelp =

"在年份不详的一"+

"个期间中,妖"+

"与人类都存在"+

"于天下上,并"+

"基础为对立状"+

"态,然则不排"+

"除有相处一路"+

"的可能,由于"+

"人类基础已经"+

"吸收天下上有"+

"妖的事实了。";

着末是画出来:

Vector vector = getSubsection(strGamehelp);

for(int i=0;i

vector =巴黎人官网手机版 null;

这下好了,随便加,怎么加我都不怕,嘿嘿,自动换行。

到这是不是停止了?还没。

一个月后,你开始做英文版,赞助信息改成了英文。你发明赞助界面是惨不忍睹。

原本,英翰墨母和中文不一样,它是不等宽字体,有肥有瘦,发育不太均衡。

更紧张的是,,英文中一个单词是不能拆开分成两行显示。

怎么办。回以前用高档界面?想都不要想。

你打开API手册查阅,盼望能找出点什么来。

有了,你目下一亮,印入眼帘的恰是Font类供给的stringWidth函数,该函数能够返回字符串在屏幕上显示时的长度。

有了这个函数,就可以改进getSubsection函数了

此中,strSource是待断行的翰墨,font是画翰墨时应用的字体,width是每行的最大年夜宽度,而着末的strSplit是用于分词的,即英文单词中的距离符号,函数寄托这个参数来分辨单词。

public Vector getSubsection(String st巴黎人官网手机版rSource,Font font,int width,String strSplit){

Vector vector = new Vector();

String temp=strSource;

int i,j;

int LastLength = 1;

int step = 0;

try{

while (!temp.equals("")巴黎人官网手机版) {

i=temp.indexOf("

");

if(i>0){

if(font.stringWidth(temp.substring(0,i-1)) >= width){

i = -1;

}

}

if(i==-1){

if(LastLength>temp.length()){

i = temp.length();

}else{

i = LastLength;

step = font.stringWidth(temp.substring(0, i)) > width ? -1 : 1;

if(i width)) {

i = i + step;

if (i巴黎人官网手机版 == temp.length())

break;

}

}

}

if(!strSplit.equals("")){

j = i;

if (i

再改一下调用的地方:

Font font= Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN, Font.SIZE_SMALL);

g.setFont(font);

Vector vector = getSubsection(strGamehelp,font,getWidth()-10," ,.?!");

这样,对付英文我们也可以精确的自动断行显示了。

终于,你可以坐下来,喝杯水(咖啡被抢光了),听点music,享受一下:

1、通用性好,自动适应不合的屏幕大年夜小,各类说话翰墨通吃。

2、事情量小,你不用去费力手工分行,更不用为了加一个字而整个从新来过。想调剂宽度?改一个参数就好。

然而,最着末不得反面你说,切切要留意的是,必然要留意调用函数时应用的字体和实际应用的字体要同等,不然我会错(我常犯这样的差错:))

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: