首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWFLoader不工作两次

SWFLoader不工作两次
EN

Stack Overflow用户
提问于 2014-07-31 10:30:29
回答 1查看 97关注 0票数 0

我有一款充满活力的游戏,另一款迷你游戏。

我使用SWFLoader加载它

代码语言:javascript
复制
function loadMinigame(minigameName:String):void
{
    var loader:SWFLoader = new SWFLoader;
    loader.load("/Content/Swf/" + minigameName + ".swf");
    layerMinigames.addElement(loader);
}

我第一次装货的时候效果很好。但是,当我退出迷你游戏,并试图通过同样的方法再次打开它时,它在我的应用程序中并不适用(有时也不打开)。

这两个游戏都是Flex应用程序。

到底怎么回事?

更新

我做了loader.loadForCompatibility = true,现在它正确加载了!但现在,当我试图抛出结果时,我遇到了一个错误:

代码语言:javascript
复制
loader.addEventListener(Event.COMPLETE, function(e:Event):void
{
    var sys:SystemManager = SystemManager(e.currentTarget.content);
});

给予:

错误#1034:类型强制失败:无法将_AppMinigame1_mx_managers_SystemManager@14c97eb9转换为mx.managers.SystemManager。

EN

回答 1

Stack Overflow用户

发布于 2014-07-31 11:44:39

您最好在加载后缓存加载的迷你游戏,然后在需要时再显示。但是,确保迷你游戏的ADDED_TO_STAGE监听器正确地重置了迷你游戏。

代码语言:javascript
复制
static var loadedGames:Object={};
function loadMinigame(minigameName:String):void
{
    if (loadedGames[minigameName]==null) {
        var loader:SWFLoader = new SWFLoader;
        loader.load("/Content/Swf/" + minigameName + ".swf");
        loadedGames[minigameName]=loader;
        loader.addEventListener(Event.COMPLETE,loaderFinished);
    } else {
        layerMinigames.addElement(loadedGames[minigameName]);
    }
}
function loaderFinished(e:Event):void {
    layerMinigames.addElement(e.target);
    // do the rest, like setting proper start time for minigame, etc
}

更新:因为您在运行这样的进程时内存不足,这意味着迷你游戏的实例保存了太多内存,需要释放(GC'd)才能加载另一个小型游戏。因此,缓存加载主权财富基金是没有问题的。您可以使用unloadAndStop()调用来释放SWF,在这样做之前,确保从显示列表中删除了您的迷你游戏,并且它的REMOVED_FROM_STAGE侦听器关闭了每个连接到stage的侦听器。此外,您可能需要调试您的小型游戏SWF来查找可能的内存泄漏,因为您的SWF共享相同的内存空间,而其中一个内存泄漏会使您在所有其他内存中做任何事情的努力付诸东流。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25056650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档