Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 FlashProfessional CC在发布来自Great.fla的swf时卡住了_Actionscript 3_Flash Cc - Fatal编程技术网

Actionscript 3 FlashProfessional CC在发布来自Great.fla的swf时卡住了

Actionscript 3 FlashProfessional CC在发布来自Great.fla的swf时卡住了,actionscript-3,flash-cc,Actionscript 3,Flash Cc,由于大量的库对象,My.fla大约有600mb大。 我的库中有15.500个对象,其中大部分是图像。这可能是一种不好的做法,但我的客户机需要将这些图像放在其中,而不是从外部源动态加载它们 我已经尽可能地缩小了图像的大小,同时仍然保持了良好的质量 我正在为Flash Player发布,并且已经尝试了不同的版本。 基本上,我的应用程序是相当简单的试卷应用程序,用简单的多选择题填充20份试卷。每张试卷有150个问题,分为4个部分,每个问题包含1个问题图片和4个答案图片供选择。在用户选择他/她的答案后,

由于大量的库对象,My.fla大约有600mb大。 我的库中有15.500个对象,其中大部分是图像。这可能是一种不好的做法,但我的客户机需要将这些图像放在其中,而不是从外部源动态加载它们

我已经尽可能地缩小了图像的大小,同时仍然保持了良好的质量

我正在为Flash Player发布,并且已经尝试了不同的版本。 基本上,我的应用程序是相当简单的试卷应用程序,用简单的多选择题填充20份试卷。每张试卷有150个问题,分为4个部分,每个问题包含1个问题图片和4个答案图片供选择。在用户选择他/她的答案后,将删除这些图像实例并创建新实例

我听说像实例之类的东西都有16.000的神奇极限,所以应该保持在它下面,因为代码本身非常简单,在这些图片之后没有多少其他实例

除了我丑陋的文件大小之外,我还将所有这些图像从库中以循环方式推入数组: 例如,链接名称是Paper1_Chem_Q1_C.jpg,并且_X标记了正确的答案-这就是我取消移动该名称的原因

var sectionLengths:Array = [40,40,45,25];
var prefixes:Array = ["Phys","Chem","Maths","Eng_Reas"];
var prefixes2:Array = ["A","B","C","D"];
for(var p:int = 0; p<20; p++){ //test papers loop
    for(var s:int = 0; s<4; s++){ //sections loop
        var fillQArray:Array = this["tp"+(p+1)+"section"+(s+1)+"questions"];
        var fillAArray:Array = this["tp"+(p+1)+"section"+(s+1)+"answers"];

        for(var q:int = 0; q<sectionLengths[s]; q++){ //question loop
            if(ApplicationDomain.currentDomain.hasDefinition(String("Paper"+(p+1)+"_"+prefixes[s]+"_Q"+(q+1)))){
                fillQArray.push(getDefinitionByName("Paper"+(p+1)+"_"+prefixes[s]+"_Q"+(q+1)) as Class);
                var qa:Array = new Array();
                for(var a:int = 0; a<4; a++){ //answers loop
                    if(ApplicationDomain.currentDomain.hasDefinition(String("Paper"+(p+1)+"_"+prefixes[s]+"_Q"+(q+1)+"_"+prefixes2[a]))){
                        qa.push(getDefinitionByName("Paper"+(p+1)+"_"+prefixes[s]+"_Q"+(q+1)+"_"+prefixes2[a]));
                    }else if(ApplicationDomain.currentDomain.hasDefinition(String("Paper"+(p+1)+"_"+prefixes[s]+"_Q"+(q+1)+"_"+prefixes2[a]+"_X"))){
                        qa.unshift(getDefinitionByName("Paper"+(p+1)+"_"+prefixes[s]+"_Q"+(q+1)+"_"+prefixes2[a]+"_X"));
                    }
                }
                fillAArray.push(qa);
            }
        }
    }
}
这个循环当然可以完成任务,但是需要一些时间来运行。另外,我在它之前预定义了很多数组,所以这可能是另一个潜在的问题吗

在开发过程中,我用很少的试卷测试了所有的东西,一切都很顺利,但现在当我导入所有其余的图片时,它在发布时就卡住了。我让它出版了一整晚,但现在早上它又被卡住了,我必须停止Flash进程才能退出

我还将内存量从jvm.ini增加到了2048m,因此它不再给出关于jvm内存太小的警告对话框


所有的建议都非常受欢迎。

多亏了Vesper,我终于让它起作用了! 以下是Flash Professional CC的详细说明,非常详细,因为这对我来说是全新的,我花了近2天的时间多次失败:

步骤1-发布SWC: 创建empty.fla并将图像导入库。选择所有选项 使用鼠标2按钮打开图像和属性。在ActionScript选项卡上 选择导出操作脚本。确保第1帧中的导出也已激活。 在“属性”面板上定义项目的类名,例如:images\u swc。 转到“发布设置”并仅发布SWC。 注:

在我的例子中,我不得不创建3个SWC文件,因为有15000多张图片。 在向库中添加/删除大量图像以及发布SWC时,Flash Professional停止响应,看起来像是崩溃,但在30-60分钟内成功完成! 当一个多小时处于无响应状态时,我停止了Flash进程,并尝试使用少量图像。 首先,我创建了empty.fla,从我的主项目中删除了除图像以外的所有内容,但它在SWC发布期间并没有导出正确的图像。但在我保存为。。我的形象工程,效果很好。 总是在Flash通知JVM内存不足时,我将JVM.ini中的内存值加倍,然后重新开始。最终达到40.96亿美元。 第2步-在主要项目中使用SWC: 文件->发布设置->高级ActionScript 3.0设置扳手-右上角的图标->库路径选项卡->单击浏览到SWC文件,找到您的SWC并单击确定。 创建空的.as文件并在其中键入每个图像类名。这里的想法是提及来自SWC的所有图像,以便编译器理解您希望将它们包括在主项目中。e、 g:

package {   
  public class Assets {       
    image_1;
    image_2;
    image_3;
  }
}
在主项目中,包括Assets.as和SWC文件:

import Assets;
import images_swc;
请参考以下图片:

getDefinitionByName("image_1")
最后说明:

如果您忘记了SWC类名,请将SWC文件的扩展名更改为.zip,打开它,您将在其中的xml文件中找到您的类名和其他详细信息

若要获取.as文件中大量图像的文件名,假设图像的类名和文件名相同,可以使用windows命令提示符和dir/s>filename.txt-命令将其文件名转换为txt文件。我自己使用的免费版本还可以从子文件夹中查找文件,将文件列表粘贴到Assets.as中,并使用Flash中的Find&Replace功能将.jpg替换为

因此,我有超过15000张图像,将它们转换成3个SWC文件=每个SWC 15-20兆,我的最终.swf大约为55兆-它在几分钟内编译完成,这使得这个非常完美的解决方案适合我的项目


@维斯帕,再次感谢你

也许您可以首先从全部或部分映像集中准备一个SWC,然后将预编译的SWC导入到您的项目中,然后再次尝试编译。但是很可能您已经达到了编译器内存的32位限制,即编译SWF编译器所需的mor
内存超过2GB,并且由于未测试的行为或关闭as3设置中的编译器警告而挂起。为什么客户端希望将其放在fla中?有什么特别的原因吗?我很怀疑他想把它用于网络。这确实是一个可怕的做法。@Fygo,你说得对-这将是一个exe投影仪,尽管它仍然是一个非常糟糕的解决方案。BotMaster,谢谢,但在主要问题上没有帮助。Vesper,SWC解决方案似乎很有希望,我现在正在尝试!虽然我搞砸了第一个SWC,因为我没有意识到它们自己也需要类名,但现在正在慢慢创建新的。Flash在发布大型swc时似乎已经死了,但经过几个小时的等待,它幸运地完成了