仅限循环返回数组中的最后一项:(

时间:2009-11-25 19:58:14

标签: flash actionscript-2

我是一个动作新手,所以我希望我在这里缺少一些简单的东西。简而言之,我有一个for循环更新动态文本元素,但似乎迭代速度太快,只有循环中的最后一项更新文本。我希望动态文本元素在循环中使用EACH项更新,而不仅仅是最后一个。

我有一个单帧电影,我从外部文本文件创建一个简单的字符串数组:

_global.i = 0;
_global.numplaces = 0;
_global.PlacesArray = new Array();

loadedText = new LoadVars();
loadedText.onLoad = function() {
    filecontents = this.places;
    _global.PlacesArray = filecontents.split(";"); //parse the file string
    _global.numplaces = _global.PlacesArray.length-1;
    };
loadedText.load("listofplaces.txt");

在嵌套电影(“places”)中,我有一个for循环:

for (_global.i=0; _global.i<_global.numplaces; _global.i++) {
    trace("global i is "+_global.i);
    trace(_global.PlacesArray[_global.i]);
    CityState.place.htmlText = _global.PlacesArray[_global.i];
}

跟踪工作正常并显示for循环正在迭代。但是,电影中的place.htmlText动态文本嵌套了一个级别(用于补间目的),我希望循环更新只是使用数组中的最后一项进行更新。

4 个答案:

答案 0 :(得分:6)

我不是一个动作脚本编码器,但基于上面的for循环,看起来你总是分配给htmlText属性,而不是附加到它:

CityState.place.htmlText = _global.PlacesArray[_global.i];

我不确定as2是否支持+ =运算符,但是附加值可能会解决这个问题。

答案 1 :(得分:0)

我不知道这是什么:

CityState.place.htmlText = _global.PlacesArray[_global.i];

但如果您想要的只是简单地附加文本,那么很可能是您的问题。它看起来(从编码约定推导出来)就像一个名为place的静态变量,一个动态文本字段,在一个名为CityState的类中。如果这是正确的,那么你的循环正在完成它所要做的事情,遍历所有项目,将每个项目的文本设置为文本字段。循环完成后,文本字段将具有您在循环中引用的最后一项的值。

如果你想要的是追加文字,试试这个(注意等号后面的加号):

CityState.place.htmlText += _global.PlacesArray[_global.i];

但说实话,如果你想在PlacesArray中为每个项目添加文字或创建一个新的文本字段,我无法从你的帖子中说出来。

答案 2 :(得分:0)

从其他地方获得帮助......我刚刚将#2更改为:

_global.i++
if (_global.i>=_global.numplaces) { _global.i=0; }
CityState.place.htmlText = _global.PlacesArray[_global.i];

得到我想要的东西:)

现在我只需要弄清楚在更新文本之前如何让父电影等到子电影加载(第一项现在显示为未定义,因为子电影在未初始化某些全局变量之前运行)。

答案 3 :(得分:0)

在电影的顶级,只加载外部文件并解析成一个数组:

loadedText = new LoadVars();
loadedText.onLoad = function() {
    filecontents = this.places;
    _global.PlacesArray = filecontents.split(";"); //parse the file string
    _global.numplaces = _global.PlacesArray.length-1;
    _global.i = 0;
    CityState.place.htmlText = _global.PlacesArray[_global.i];
};
loadedText.load("listofplaces.txt");

在子电影的第一帧(向下2级),将数组的内容一次一个地提供给动态文本字段:

if ( _global.PlacesArray ) {
    if (_global.i>=_global.numplaces) { 
       _global.i=0; 
    };

    CityState.place.htmlText = _global.PlacesArray[_global.i];
    _global.i++;
}