如何将动态文本框的不同行转换为AS3中的影片剪辑

时间:2016-12-11 12:49:13

标签: actionscript-3 flash actionscript

我对我的项目有一个问题,即如何将动态文本框的不同行转换为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");
    }
  }
}

2 个答案:

答案 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调整为第二个值(红色);
我的答案不是演练而是指导。

enter image description here

答案 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");
    }
}