Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3项目竞赛条件_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 AS3项目竞赛条件

Actionscript 3 AS3项目竞赛条件,actionscript-3,flash,Actionscript 3,Flash,当我用一些自定义事件实例化新的MovieClip类时,我在解决存在的竞争条件时遇到了一些问题,这些自定义事件在我可以将实例存储到关联对象中之前会触发 主类 var pages:Object = { "page1":"page1", "page2":"page2" }; for(var pageName:String in pages) { pages[pageName] = buildPage(pageName, onReady); } function buildP

当我用一些自定义事件实例化新的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]);
    }
}
第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实例供以后参考之前,原始字符串对象仍然存在。关于如何克服这个问题有什么建议吗?

您发布的代码没有描述标准类。
此代码是在movieclip帧上还是在单独的文件中?
但就发布的代码而言,我可以看到您的问题是在将对象添加到数组之前触发PAGE_CREATE事件。
你在干什么

newPage.dispatchEvent(new Event("PAGE_CREATE"));
在返回对象之前。
您没有发布完整的类,因此我真的无法帮助您重写代码,但根据您发布的内容,我将完全删除buildPage方法,并将代码放入循环中,然后在将对象添加到数组中后分派事件。
另外,另一个原因是,最佳实践是,如果某个函数中没有很多代码,则不要从循环调用该函数

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"));
}

我只发布了与情况相关的部分类,而不是整个类,并且我已经转移到一个类似于您所描述的设置。我只是觉得这是一个肮脏的代码,我很想看看是否有更好的解决方案。谢谢你重申我的问题,我开始觉得我疯了。就像我说的,没有你发布完整的代码,我无法帮助你重新设计类到更标准的水平。