我花了几天时间研究这段代码,看起来很简单,但它永远不会奏效。我要做的就是在同一目录中自动加载person0.swf
到person4.swf
。我已经进行了设置,以便我可以更改单个数字并加载到person[whatever-the-new-number-is].swf
目前它加载了第一部电影,就是这样。我也收到了这个错误:
“TypeError:错误#1009:无法访问空对象引用的属性或方法。 在菜单()“
这是代码
package {
import flash.display.*;
import flash.net.URLRequest;
import flash.events.*;
public class Menu extends MovieClip {
var loaders:Array;
var loadedCount:uint;
var person:Array = new Array();
var filenum:int = 5;
function Menu() {
for (var i = 0; i < 4; i++) {
var loader = new Loader();
person.push("person" + i + ".swf");
var currentperson = person[i];
var url:URLRequest = new URLRequest(currentperson);
loader.load(url);
addChild(loader);
loader.content.x = i * 240;
}
}
}
}
答案 0 :(得分:2)
我认为正在发生的事情是,在您尝试移动加载程序内容的位置之前,加载程序没有时间来完成加载过程。由于内容尚未到位,因此返回错误,因为内容为空。
如果你注释掉“loader.content.x = i * 240;”你会发现它运行良好。
所以你可能想要做的是在加载程序通过向加载器的contentLoaderInfo属性添加事件监听器来调度“完成”事件之后移动内容。
试试这个:
private var person:Array = new Array();
private var itemCount:Number = 0;
private var itemMax:Number = 4;
public function Main():void
{
loadSWFs();
}
private function loadSWFs()
{
person.push("person" + itemCount + ".swf");
var currentPerson = person[itemCount];
var url:URLRequest = new URLRequest(currentPerson);
var loader:Loader = new Loader();
loader.load(url);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, moveLoaderChild);
addChild(loader);
}
private function moveLoaderChild(e)
{
e.target.content.x = itemCount * 240;
if (itemCount < itemMax)
{
itemCount++;
loadSWFs();
}
}
答案 1 :(得分:1)
我也想出了另一个解决方案,尽管BigLarry的设计有点复杂。当我从上一行.content
中删除loader.content.x
时,错误消失了。
此外,通过将每个加载器和URLRequest存储在一个数组中,所有swfs都显示在屏幕上,而不是重复替换相同的swfs。
package {
import flash.display.*;
import flash.net.URLRequest;
import flash.events.*;
public class Menu extends MovieClip {
public function Menu() {
var loaders:Array = new Array();
var person:Array = new Array();
var url:Array = new Array();
var filenum:int = 5;
for (var i = 0; i < filenum; i++) {
loaders.push(new Loader());
person.push("person" + i + ".swf");
url.push(new URLRequest(person[i]));
loaders[i].load(url[i]);
addChild(loaders[i]);
loaders[i].x = i * 240;
}
}
}
}
答案 2 :(得分:0)
你应该使用Greensock的LoaderMax(TweenLite / TweenMax的创建者)。
http://www.greensock.com/loadermax/
它非常方便,您只需传入一组文件路径,然后完成剩下的工作。在上面的链接上查看现场演示,你会被说服。