在 AS 变量中使用 XML 和动画片段重复函数
Repeating functions with XML and movieclips in AS variables
我是 AS3 新手。基本上我有一个由 98 个 UILoader 组成的网格,每个 UILoader 都根据 XML 文件抓取一个图像。与其写出 98 行代码,不如每次用不同的数字重复一遍?
function loadworld() {
var xmlData:XML = new XML();
var theURL_ur:URLRequest = new URLRequest("imagepos.xml" + "#lawl=" + (Math.random() * 1000));
var loader_ul:URLLoader = new URLLoader(theURL_ur);
loader_ul.addEventListener("complete", fileLoaded);
function fileLoaded(e:Event):void
{
xmlData = XML(loader_ul.data);
if (t88.source == xmlData.t88) { } else { t88.source = xmlData.t88; };
if (t89.source == xmlData.t89) { } else { t89.source = xmlData.t89; };
if (t90.source == xmlData.t90) { } else { t90.source = xmlData.t90; };
loadworld();
}
}
正如您从代码中看到的那样,数字始终相同,因此我只需要从 1-98 重复 98 次即可。
我在尝试记录所有 98 个 UILoader 上的鼠标点击时也遇到了同样的问题:
this.t88.addEventListener(MouseEvent.CLICK, function (){
pi1(88);
});
t88
表示 tile 88 或 UILoader88,我需要它来激活功能 pi1(88)
,然后 t89
需要激活 pi1(89)
等
当操作一个对象的多个实例时,最好使用Array
(或Vector
)来简化处理。
对于您的情况,您可以创建 UILoader
s 并将它们添加到数组中,然后对于所有操作,您可以使用一些 for 循环,如下所示:
// the array where we will save our tiles
var tiles:Array = [];
// creation of tiles
for(var i:int = 0; i < 99; i++){
var tile:UILoader = new UILoader();
// save the index of the tail as its name
tile.name = String(i+1);
tile.addEventListener(
MouseEvent.CLICK,
function(e:MouseEvent):void {
trace(e.currentTarget.name); // gives : 1, 2, .. , 98
// you can call your function : pi1(int(e.currentTarget.name));
}
)
tiles.push(tile);
addChild(tile);
}
function load_xml(){
var xml:XML;
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest('xml.xml'));
loader.addEventListener(Event.COMPLETE, process_XML);
function process_XML(e:Event):void {
xml = new XML(loader.data);
var tile:UILoader;
for(var i:int = 0; i < tiles.length - 1; i++){
tile = tiles[i];
if (tile.source != xml['t'+(i+1)]) tile.source = xml['t'+(i+1)];
}
}
}
load_xml();
编辑:
如果您的 UILoader
在舞台上,您可以像这样将它们添加到数组中:
var tiles:Array = [];
var index:int;
for(var i:int = 0; i < this.numChildren; i++){
var obj:Object = this.getChildAt(i);
if(obj is UILoader){
index = int(obj.name.replace('t', ''));
tiles[index - 1] = obj;
obj.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
trace(e.currentTarget.name.substr(1)); // gives 1, 2, ...
})
}
}
希望能帮到你。
我是 AS3 新手。基本上我有一个由 98 个 UILoader 组成的网格,每个 UILoader 都根据 XML 文件抓取一个图像。与其写出 98 行代码,不如每次用不同的数字重复一遍?
function loadworld() {
var xmlData:XML = new XML();
var theURL_ur:URLRequest = new URLRequest("imagepos.xml" + "#lawl=" + (Math.random() * 1000));
var loader_ul:URLLoader = new URLLoader(theURL_ur);
loader_ul.addEventListener("complete", fileLoaded);
function fileLoaded(e:Event):void
{
xmlData = XML(loader_ul.data);
if (t88.source == xmlData.t88) { } else { t88.source = xmlData.t88; };
if (t89.source == xmlData.t89) { } else { t89.source = xmlData.t89; };
if (t90.source == xmlData.t90) { } else { t90.source = xmlData.t90; };
loadworld();
}
}
正如您从代码中看到的那样,数字始终相同,因此我只需要从 1-98 重复 98 次即可。
我在尝试记录所有 98 个 UILoader 上的鼠标点击时也遇到了同样的问题:
this.t88.addEventListener(MouseEvent.CLICK, function (){
pi1(88);
});
t88
表示 tile 88 或 UILoader88,我需要它来激活功能 pi1(88)
,然后 t89
需要激活 pi1(89)
等
当操作一个对象的多个实例时,最好使用Array
(或Vector
)来简化处理。
对于您的情况,您可以创建 UILoader
s 并将它们添加到数组中,然后对于所有操作,您可以使用一些 for 循环,如下所示:
// the array where we will save our tiles
var tiles:Array = [];
// creation of tiles
for(var i:int = 0; i < 99; i++){
var tile:UILoader = new UILoader();
// save the index of the tail as its name
tile.name = String(i+1);
tile.addEventListener(
MouseEvent.CLICK,
function(e:MouseEvent):void {
trace(e.currentTarget.name); // gives : 1, 2, .. , 98
// you can call your function : pi1(int(e.currentTarget.name));
}
)
tiles.push(tile);
addChild(tile);
}
function load_xml(){
var xml:XML;
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest('xml.xml'));
loader.addEventListener(Event.COMPLETE, process_XML);
function process_XML(e:Event):void {
xml = new XML(loader.data);
var tile:UILoader;
for(var i:int = 0; i < tiles.length - 1; i++){
tile = tiles[i];
if (tile.source != xml['t'+(i+1)]) tile.source = xml['t'+(i+1)];
}
}
}
load_xml();
编辑:
如果您的 UILoader
在舞台上,您可以像这样将它们添加到数组中:
var tiles:Array = [];
var index:int;
for(var i:int = 0; i < this.numChildren; i++){
var obj:Object = this.getChildAt(i);
if(obj is UILoader){
index = int(obj.name.replace('t', ''));
tiles[index - 1] = obj;
obj.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
trace(e.currentTarget.name.substr(1)); // gives 1, 2, ...
})
}
}
希望能帮到你。