VerifyError突然出现。救命!

时间:2011-03-25 19:14:55

标签: actionscript-3 actionscript verifyerror

我是免费在线炮兵游戏ShellShock Live的开发者: http://www.newgrounds.com/portal/view/564049

一切都运行顺利,但每隔一段时间大约4个小时左右,数百个“VerifyError:错误#1026”将显示在我的错误日志中。然后,他们会停下来。

我查看了VerifyError,发现“VerifyError类表示遇到格式错误或损坏的SWF文件时发生的错误。” Newgrounds上的SWF只是小型加载器SWF,可以从另一个站点加载完整游戏SWF,因此必定存在问题。我很难过,因为游戏将运行好几天,然后在SWF没有任何变化之后才开始明白这些错误。

ShellShock在任何特定时刻都有数百名玩家在线,所以我想尽快解决这个问题。任何帮助,将不胜感激!谢谢!

3 个答案:

答案 0 :(得分:1)

我知道原帖是几年了但是因为我花了很多天试图解决类似的问题,并且因为这个帖子不包含我认为正确的解释我将发布我在这里调查的结论,供其他人使用:

几乎可以肯定记录VerifyError事件,因为NewGrounds上的加载程序SWF的目标Flash游戏版本低于导致此错误的游戏SWF版本。

用户系统上的Flash Player将接受NewGrounds SWF加载程序,因为它的目标版本等于或低于安装的版本。之后,可以加载针对较高Flash Player版本的外部SWF,而不会引起Flash Player的任何抱怨,除非它尝试访问该Flash Player中的不可用功能,然后它将抛出VerifyError。

这个问题的零星性质,在4小时的激增中,可能与后来的Flash Player版本在世界不同地区(以及不同的时区)的不同渗透有关。在最近Flash Player版本渗透率较低的国家/地区的休闲游戏(周末和晚上?)非常活跃的时期,您可能会看到记录批次的这些VerifyErrors。

坏消息是,经过多天尝试找到解决此问题的方法后,我们无法找到任何方法来捕获VerifyError。它甚至没有被UncaughtErrorEvent处理程序捕获!

我可以建议的唯一可能对你的情况有帮助(不幸的是,不是我的)是确定NewGrounds加载器SWF的目标版本(检查SWF中的第4个字节)然后执行以下操作之一:

  • 将您的游戏编译为与加载程序目标相同的Flash Player目标。这样你可以确定如果NewGrounds加载器SWF成功加载到用户的Flash Player中,你的SWF也可以在该版本中正常工作,或者

  • 在游戏的初始化代码中,检查Capabilities.version以确定用户系统上安装的Flash Player版本,并将其用于分支控制,以便高级Flash Player功能仅用于相应的Flash Player版本

在我的情况下,我可以访问加载程序代码,但不能访问它加载的数千个SWF的代码。由于外部SWF作为ByteArrays被打印成加载器SWF的副本,我可以检查SWF的Flash Player目标版本字节(byteArray [3]),并将其与安装的Flash Player'major.minor'版本进行比较,从Capabilities.version获取,但由于SWF Flash Player目标版本字节(当前)随Flash Player的每个次要版本增量递增,因此无法将SWF目标字节(byteArray [3])映射到将来的Flash Player'major.minor'版本,直到我们知道当前Flash Player的最大次要版本号是多少。

希望遇到这种情况的任何人都会比我们做得更好。

答案 1 :(得分:0)

我认为这可能是一个Flash播放器错误,请尝试禁用任何图形加速或缓存。计算我们使用的图形卡可能会有所帮助。

您是否对套接字服务器进行了更改?你使用的是smarfoxserver吗?

答案 2 :(得分:0)

我在cs3 flash9的一个非常小的项目中遇到了这个错误。所以我能够跟踪这个错误。

注意:错误发出此错误。在我的项目中发出错误的原因不是因为swf错误,因为我没有将任何swf导入到我的项目中。

原因: 我的代码行写得像这样: _mc.my_counter&& _mc.my_counter - ;

解: 我改变了这一行: if(_mc.my_counter)_mc.my_counter - ;

...并且验证错误消息的消失速度与它出现的一样快。看起来这是一个真正的as3 bug。