我在解决竞争条件时遇到了一些麻烦,当我将一些自定义事件实例化为新的MovieClip类时,在我将实例存储在关联对象中之前就会重新启动。
主要类
var pages:Object = {
"page1":"page1",
"page2":"page2"
};
for(var pageName:String in pages)
{
pages[pageName] = buildPage(pageName, onReady);
}
function buildPage(pageName:String, onReady:Function)
{
var newPage:MovieClip = new (getDefinitionByName(pageClass) as Class)();
newPage.addEventListener("PAGE_READY", onReady);
newPage.dispatchEvent(new Event("PAGE_CREATE"));
return newPage;
}
function onReady(e:Event)
{
for(var pageName:String in pages)
{
trace(typeof pages[pageName]);
}
}
Page 1& 2个类扩展了MovieClip
function pageX()
{
this.addEventListener("PAGE_CREATE",this.onCreate);
}
function onCreate(e:Event)
{
this.graphics.beginFill(0xFF0000);
this.graphics.drawRect(0,0,200x200);
this.graphics.endFill();
this.dispatchEvent(new Event("PAGE_READY"));
}
不幸的是,当这一切都火上浇油时我得到了:
string
string
object
string
在我可以存储MovieClip实例供以后参考之前,原始字符串对象仍然存在。关于如何击败这个的任何建议?
答案 0 :(得分:0)
您发布的代码并未描述标准类
此代码是在动画片段帧上还是在单独的文件中?
但就发布的代码而言,我可以看到你的问题是在将对象添加到数组之前触发了PAGE_CREATE事件。
你正在做什么
newPage.dispatchEvent(new Event("PAGE_CREATE"));
返回对象之前
您没有发布完整的类,所以我真的无法帮助您重写代码,但是,从您发布的内容我将完全删除buildPage方法并将代码放入循环然后在将对象添加到数组后调度事件。
另外,另一个原因,最好的做法是不要从loopif调用函数,函数中没有很多代码。
for(var pageName:String in pages)
{
var newPage:MovieClip = new (getDefinitionByName(pageClass) as Class)();
newPage.addEventListener("PAGE_READY", onReady);
pages[pageName] = newPage;
newPage.dispatchEvent(new Event("PAGE_CREATE"));
}