在不应该发生的情况下出现错误 #1502

Getting Error #1502 when it shouldn't have happened

我开始在游戏中遇到很多 #1502 错误。 ("script executed for too long")不同的Flash播放器版本,不同的用户,游戏中的随机位置。我自己复制不了。

我收集游戏日志以防出现未捕获的错误,根据这些日志,用户在错误发生前几秒与游戏进行了交互。这就是困扰我的地方,这就是我问这个问题的原因。这不可能是对的。据我所知,如果出现此错误,他们至少应该在 15 秒内无法与之交互。

而且还不止一个。所有这些新错误(每天数百个)在错误发生前 1-10 秒至少记录了一次用户操作。

起初我以为时间戳是错误的。我使用 getTimer() 来获取它。我已在游戏中插入 while (true) 循环来对此进行测试,并验证时间戳是否正确,并在启动导致 #1502 错误的循环的操作后 15 秒发生。

此错误可能与 TweenLite 有关,因为所有堆栈跟踪都如下所示:

Error: Error #1502
    at com.greensock.core::SimpleTimeline/renderTime()
    at com.greensock::TweenLite$/updateAll()

我用的TweenLite版本不是最新的,但是我在这个游戏里用了1.5年了,之前没出过问题。不幸的是,我无法更新到最新版本,因为它不向后兼容,需要进行大量更改。

UPD 说清楚,问题是 "How can I get #1502 error if the user was able to interact with the game just a few seconds before it?"

您需要重构您的代码。这应该有所帮助并给出一些解释:

http://www.senocular.com/flash/tutorials/asyncoperations/

这是一个 JaveScript 错误。错误发生前 1 分钟,对 JS 函数的 ExternalInterface 调用出现了错误。 1 分钟后,它突然抛出了这个错误。我没有启用 JS 错误编组,但这个错误仍然存​​在。堆栈是偶然的,与实际错误没有任何关系。