Actionscript 3 - gotoAndStop上的堆栈溢出

时间:2014-09-18 00:18:45

标签: actionscript-3 flash actionscript

所以我将游戏从Actionscript 2移植到Actionscript 3,这个时髦的错误让我无法进一步调试。

它是一个堆栈溢出错误(得到堆栈溢出!),这显然发生在gotoAndStop函数上,它是本机AS3代码。

不幸的是,我不知道这种行为的上下文发生在哪里。看起来堆栈溢出错误会导致调试器崩溃,因此下面的长错误消息是我必须使用的全部内容。它似乎非常内在,但它仍然存在。

有没有人经历过,或者可以提供有关AS3中此(或类似)错误的提示/见解?

Error: Error #1023: Stack overflow occurred.
at flash.display::DisplayObjectContainer()
at flash.display::Sprite()
at flash.display::MovieClip()
at flash.display::MovieClip/gotoAndStop()
at block/frame1()
at flash.display::MovieClip/gotoAndStop()
at block/frame1()
at flash.display::MovieClip/gotoAndStop()
at block/frame1()
at flash.display::MovieClip/gotoAndStop()
at block/frame1()
at flash.display::MovieClip/gotoAndStop()
at block/frame1()

以下是发生此错误的行:

childClip.gotoAndStop(MovieClip(root).someVariable[value]);

2 个答案:

答案 0 :(得分:0)

应检查在您首先发送播放头的实际帧上是否写有任何代码 你进入了一个无限循环,播放器以圆圈运行。 你应该在应用程序的早期设置一个断点,然后一步一步(f5)。

答案 1 :(得分:0)

我正在回答我自己的问题。

我做了一堆调试。我必须感谢@LDMS注意到AS3的简单非调试模式调试功能,这有助于实现这一目标!

有一系列行为导致了这个问题。

  1. 导致堆栈溢出的第一个问题是gotoAndStop()立即执行目标帧上的代码。
  2. 当gotoAndStop()出现时,目标影片剪辑上当前正在执行的代码将被中断。这就是为什么错误难以跟踪的原因 - 它似乎是随机发生的(但每次都是因为加载程序时的执行次数)。
  3. 第一帧包含功能变量(例如var someFunction:Function;)。
  4. gotoAndStop()函数似乎是立即停止在第一帧初始化时的函数变量。然后它会尝试进入某个帧,这可能使用了其中一个函数,导致错误检查表现得很奇怪,然后检测到堆栈溢出。

    解决方案是让目标实例在第一帧代码行的末尾调用原始的gotoAndStop()函数。这样,在执行代码期间不会发生gotoAndStop()函数。这是同步的。

    希望这有助于其他人在将来遇到类似问题!