我知道原来的帖子已经有几年的历史了,但是由于我刚刚花了很多天试图解决类似的问题,并且由于该线程不包含我认为正确的解释,所以我将发布我的结论在这里自己调查,供其他人使用:
几乎肯定会记录 VerifyError 事件,因为 NewGrounds 上的加载器 SWF 的目标 Flash Player 版本低于导致此错误的游戏 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 被打印到加载器 SWF 的副本中作为 ByteArrays,我可以检查 SWF 的 Flash Player 目标版本字节 (byteArray[3]),并将其与从 Capabilities.version 获取的已安装 Flash Player 'major.minor' 版本进行比较,但由于 SWF Flash Player 目标版本字节(当前)随着 Flash Player 的每个次要版本增加而增加,因此不可能将 SWF 目标字节 (byteArray[3]) 映射到未来的 Flash Player 'major.minor' 版本,直到我们知道当前 Flash Player 的最大次要版本号是多少。
希望遇到这种情况的其他人会比我们有更好的运气。