我是一个动作新手,所以我希望我在这里缺少一些简单的东西。简而言之,我有一个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
动态文本嵌套了一个级别(用于补间目的),我希望循环更新只是使用数组中的最后一项进行更新。
答案 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++;
}