我对我的项目有一个问题,即如何将动态文本框的不同行转换为AS3中的影片剪辑?
实际上,我有一个名为test.txt的文本文件。例如:
它包括:
今天是太阳; 今天是星期一; 今天是星期二; 今天是星期三; 今天是星期四; 今天是周五; 今天是星期六;
然后我想将它们全部放入一个数组中,然后将一个字符串显示在名为text_txt的动态文本框中。
我的图书馆里有不同的对象。如果我们看到" sun"在第一行中,第一个对象(obj01)将显示在名为mc的影片剪辑内的特定区域中。
问题在于:
拳头:如果我的第一行有不同的文字。例如"今天是太阳;"。如何找到" sun"在这一行???
第二:如何将动态文本框的不同行转换为影片剪辑。因此,如果用户点击" obj01",动态文本框中的第一行会变大???
感谢您的时间和提前帮助。
import flash.events.MouseEvent;
var flag:int = 0;
//load the txt file
var myTextLoader:URLLoader = new URLLoader();
myTextLoader.addEventListener(Event.COMPLETE, onLoaded);
myTextLoader.load(new URLRequest("test.txt"));
//when the scene loads, all the info from txt file shown into the dynamic text;
function onLoaded(e:Event):void
{
//put all the info into array
var days:Array = e.target.data.split(/\n/);
var str:String;
//show them in the dynamic text
for (var i=0; i<days.length; i++)
{
str = days[i];
text_txt.appendText(str + "\n");
//if one text founded, do somethind and shoe an objectinthe output;
switch (str)
{
case "sun;\r" :
var obj01:Show = new Show();
mc.addChild(obj01);
obj01.x = -200;
obj01.y = -15;
break;
default :
trace("None of the above were met");
}
}
obj01.buttonMode = true;
//if the object clicked then something must be happend to the first line in the dynamic text box
obj01.addEventListener(MouseEvent.CLICK, firstLine);
function firstLine(e:MouseEvent):void
{
flag = 1;
switch (flag)
{
case 1 :
trace("Clicked!");
//the first line in the text box should get a different background and become more bigger
//Do I need to convert the first line to a movieclip? OR I need to do in another way?!
break;
default :
trace("None");
}
}
}
答案 0 :(得分:0)
首先:如果我的第一行有不同的文字。例如&#34;今天 是太阳;&#34;。如何找到&#34; sun&#34;在这一行???
将整个动态文本值及其行拆分为数组
然后检查每个数组项是否包含该键(&#34; sun&#34;)。
你必须使用像Array[x].indexOf(key) >= 0
第二:如何将动态文本框的不同行转换为电影 夹。那么,用户是否点击了&#34; mc.obj01&#34;,第一行 动态文本框会变大???
我给你举个例子来找出动画片段和文字显示大小不同的原因。这张图片来自adobe-flash。一个文本字段,其值为&#34;棕色狐狸跳跃&#34;与绿色矩形的大小相同。但是红色矩形显示的文字大小。
textField.width
相同textField.height
textField.textWidth
相同textField.textHeight
所以你必须将你的movieclip / textfield调整为第二个值(红色);
我的答案不是演练而是指导。
答案 1 :(得分:0)
经过太多的研究并尝试了很多功能,我找到了这个问题第二部分的答案。 我确信必须有办法做到这一点,这就是为什么我把它作为我最喜欢的问题。
//
var newMcTitle:Array = [];
//put all the info into array
var days:Array = e.target.data.split(/\n/);
for (var i=0; i<days.length; i++)
{
str = days[i];
//put the texts line by line into a textfield and put the textfield into a movie clip
var newMc:MovieClip = new MovieClip();
var newText:TextField = new TextField();
newText.text = days[i];
newMc.addChild(newText);
newMc.x = 30;
newMc.y = positionY;
newMc.scaleX = 2;
newMc.scaleY = 2;
addChild(newMc);
positionY += 30;
//unique instance names:
newMc.name = days[i];// or more generally when no arrays used
newMc.name = 'mc_' + i;
//trace(newMc.name);
//asssign unique property to be used to identify newMc
newMc.ivar = i;
//populate an array instantiated outside for-loop (eg, var newMcA:Array=[];)
newMcTitle.push(newMc);
}
现在你可以使用:
//if the object clicked then something must be happend to the first line in the dynamic text box
obj01.addEventListener(MouseEvent.CLICK, firstLine);
function firstLine(e:MouseEvent):void
{
flag01 += 1;
switch (flag01)
{
case 1 :
//the first line in the text box should get a different background and become more bigger
newMcTitle[0].scaleX *= 1.2;
newMcTitle[0].scaleY *= 1.2;
break;
default :
trace("None");
}
}