Actionscript 3 FlashProfessional CC在发布来自Great.fla的swf时卡住了
由于大量的库对象,My.fla大约有600mb大。 我的库中有15.500个对象,其中大部分是图像。这可能是一种不好的做法,但我的客户机需要将这些图像放在其中,而不是从外部源动态加载它们 我已经尽可能地缩小了图像的大小,同时仍然保持了良好的质量 我正在为Flash Player发布,并且已经尝试了不同的版本。 基本上,我的应用程序是相当简单的试卷应用程序,用简单的多选择题填充20份试卷。每张试卷有150个问题,分为4个部分,每个问题包含1个问题图片和4个答案图片供选择。在用户选择他/她的答案后,将删除这些图像实例并创建新实例 我听说像实例之类的东西都有16.000的神奇极限,所以应该保持在它下面,因为代码本身非常简单,在这些图片之后没有多少其他实例 除了我丑陋的文件大小之外,我还将所有这些图像从库中以循环方式推入数组: 例如,链接名称是Paper1_Chem_Q1_C.jpg,并且_X标记了正确的答案-这就是我取消移动该名称的原因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个答案图片供选择。在用户选择他/她的答案后,
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时似乎已经死了,但经过几个小时的等待,它幸运地完成了