我有一款充满活力的游戏,另一款迷你游戏。
我使用SWFLoader加载它
function loadMinigame(minigameName:String):void
{
var loader:SWFLoader = new SWFLoader;
loader.load("/Content/Swf/" + minigameName + ".swf");
layerMinigames.addElement(loader);
}我第一次装货的时候效果很好。但是,当我退出迷你游戏,并试图通过同样的方法再次打开它时,它在我的应用程序中并不适用(有时也不打开)。
这两个游戏都是Flex应用程序。
到底怎么回事?
更新
我做了loader.loadForCompatibility = true,现在它正确加载了!但现在,当我试图抛出结果时,我遇到了一个错误:
loader.addEventListener(Event.COMPLETE, function(e:Event):void
{
var sys:SystemManager = SystemManager(e.currentTarget.content);
});给予:
错误#1034:类型强制失败:无法将_AppMinigame1_mx_managers_SystemManager@14c97eb9转换为mx.managers.SystemManager。
发布于 2014-07-31 11:44:39
您最好在加载后缓存加载的迷你游戏,然后在需要时再显示。但是,确保迷你游戏的ADDED_TO_STAGE监听器正确地重置了迷你游戏。
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共享相同的内存空间,而其中一个内存泄漏会使您在所有其他内存中做任何事情的努力付诸东流。
https://stackoverflow.com/questions/25056650
复制相似问题