Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 Actionscript 3-gotoAndStop上的堆栈溢出_Actionscript 3_Flash_Actionscript - Fatal编程技术网

Actionscript 3 Actionscript 3-gotoAndStop上的堆栈溢出

Actionscript 3 Actionscript 3-gotoAndStop上的堆栈溢出,actionscript-3,flash,actionscript,Actionscript 3,Flash,Actionscript,所以我正在将一个游戏从ActionScript2移植到ActionScript3,这个奇怪的错误阻止了我进一步的调试 这是一个堆栈溢出错误,我喜欢堆栈溢出!,这显然发生在gotoAndStop函数上,该函数是本机AS3代码 不幸的是,我不知道这种行为发生在哪里。看起来堆栈溢出错误会使调试器崩溃,所以我只需要处理下面的长错误消息。它看起来非常内在,但它仍然存在 是否有人在AS3中遇到过或能够提供有关此错误或类似错误的提示/见解 Error: Error #1023: Stack overflow

所以我正在将一个游戏从ActionScript2移植到ActionScript3,这个奇怪的错误阻止了我进一步的调试

这是一个堆栈溢出错误,我喜欢堆栈溢出!,这显然发生在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]);

应该检查在您首先发送playhead的实际帧上是否有任何代码 你正在进入一个无限循环,游戏玩家在循环中运行。
你应该在应用程序的早期设置一个断点,然后一直按f5键。

我在回答我自己的问题

我做了一系列的调试。我必须感谢@LDMS注意到AS3的简单的非调试模式调试功能,它帮了我很多忙

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

导致堆栈溢出的第一个问题是gotoAndStop立即在目标帧上执行代码。 当gotoAndStop发生时,目标电影剪辑上当前正在执行的代码将被中断。这就是错误难以跟踪的原因——它似乎是随机发生的,但每次都是如此,因为加载程序时执行的次数太多。 第一个框架包括函数变量,如var someFunction:function;。 似乎gotoAndStop函数在第一帧立即停止函数变量初始化。然后它将尝试转到某个帧,该帧可能使用了其中一个函数,导致错误检查行为异常,然后检测堆栈溢出

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


希望这有助于其他人与类似的问题在未来

第一件事是进入发布设置并选中“允许调试”,它将显示发生错误的行号。是的,请确保您正在实际调试。显示您使用的调用gotoAndStop@Scott这真是个绝妙的建议!谢谢代码行基本上是childClip.gotoAndStopMovieCliproot.someVariable[value];。子剪辑是另一种类型的MovieClip。如果看不到任何代码,我猜gotoAndStop正在调用另一个gotoAndStop来运行,它再次调用第一个,以此类推。使用类型转换as3是严格的语言MovieClip您的剪辑。gotoAndStop 2;spriteyousprite.gotoAndStop2;所以我在gotoAndStop行上放置了一个断点。我把代码玩了几百遍,直到它进入堆栈。这次它给了我一个非常大的调试信息。我能从这里得到有用的信息吗?天哪!在主时间轴的第8帧上是否可能有超过3891行的代码?在框架上编写代码是调试的噩梦。。。你能给我们发一些实际的代码吗?我猜这不是一个bug。哈哈,是的,我在第8帧有8832行代码。是的,你是对的,用MovieClips调试代码绝对是一场噩梦。这就是我现在转到BitmapData的原因。然而,对于这个项目,我不能简单地使用位图;太复杂了!你对什么代码感兴趣?我不确定什么是相关的。gotoAndStop代码段位于主代码的第一帧,而不是tile MovieClip的块中。它告诉瓷砖的图像转到相应的框架。玛恩:很抱歉,但你注定要失败!因此,如果它是一个平铺电影唇,你必须有相当多的舞台上,这完全有可能是你击中了一些as3的限制,代码甚至不能正常运行。时间线不应用于以这种方式存储对象的不同状态。我最好的建议是尝试将代码移动到适当的编辑器中,例如,将其与框架分离。实例化库中的剪辑,跳转到其适当的代码自由帧。您发现任何错误的机会将高得多!这是一种痛苦,但也是可以管理的:好吧,有几百种类型的瓷砖,大多数都有特定的行为/动画,这不是真的可行,哈哈。我真的无法想象为什么这么简单的一行代码会导致堆栈溢出。