AS3 goToAndStop() 错误?

Posted

技术标签:

【中文标题】AS3 goToAndStop() 错误?【英文标题】:AS3 goToAndStop() BUG? 【发布时间】:2012-02-12 07:56:15 【问题描述】:

由于某种原因,在一个实例中,我无法让 goToAndStop(2) 转到并停止在影片剪辑的第二帧,它有两帧,并且已加载!

我正在将影片剪辑添加到类的构造函数的舞台上。然后单击button1我将框架更改为第2帧。然后单击button2返回第1帧..

它们都不起作用.....

但是.. 如果在构造函数上将影片剪辑设置为转到第 2 帧,那么它会在第 2 帧启动,当我单击按钮 1 时,它会停留在第 2 帧(正如我告诉它转到第 2 帧)然后单击button2 成功将其更改为第一帧。然后我可以再次单击 button1 并将其更改为第二帧。

从构造函数中删除 _movie.gotoAndStop(2) 并且它不再起作用。

public function changeBackground($frame:int):void

    trace('gotoFrame', $frame);
    _movie.gotoAndStop($frame);
    trace('currentFrame',_movie.currentFrame);

button1 点击输出

gotoFrame 2
currentFrame 2

button2点击输出

gotoFrame 1
currentFrame 1

所以它说它在正确的框架上,但在其他方面显示!

舞台上肯定只有一个此类的实例

【问题讨论】:

代码应该可以工作。肯定有其他问题。 【参考方案1】:

首先,请删除变量中的 $。它们不是可读性所必需的,只会减慢您的速度。

其次,不要假设 gotoAndStop 中存在错误。虽然有可能,但有成千上万甚至数百万的 Flash 游戏使用这种方法而没有问题。我这样说不是为了骂,但我希望你记住这一点,因为许多程序员都在追逐鬼魂……认为错误是语言问题。

既然你说构造函数改变了刚才找到的frame,我觉得你的_movie和button不一样。还可以尝试更改 _movie 的位置,看看您是否正在与正确的对象交谈。

另外,这个问题可能是因为阶段失效的速度不够快: AS3 - gotoAndStop with immediate action

【讨论】:

-1 前两段不相关。至于第一句话,使用$没有缺点,而且是OP自己的风格,非常好(当然,除非该项目是作为Flash游戏或类似游戏的基础发布的,在这种情况下每个人都会撕毁他们的头发)。 @Marty,我不同意。格式化非常重要,因为它是被分析的表达式的语言。该代码是公开的,因为它已在此处共享。在任何领域向同行正确表达自己的问题都很重要。 我倾向于对传递给函数的变量使用'$'前缀,对函数或类私有的变量使用'_',对于公共变量没有前缀,个人喜好,我不分享我的代码所以没关系。事实证明,这是我用来编译 FlashDevelop 的特定版本的 flex 的问题。快速更新,一切正常,它在不同的对象上被命中和错过,无论它是否真的会在帧上 gotoAndStop .....【参考方案2】:

我通常倾向于使用$ 前缀作为传递给函数的变量,_ 用于函数或类的私有变量,而公共变量没有前缀,个人喜好,我不共享我的代码,所以它不没关系。事实证明这是我用来编译 FlashDevelop 的特定版本的 flex 的问题。快速更新并且一切正常,它在不同的对象上被击中和错过,无论它实际上是否会在帧上 gotoAndStop还是不……

【讨论】:

【参考方案3】:

好吧,先吐槽一下……

我还发现 AS3 中的 gotoAndStop 存在一些严重令人沮丧的问题。如果舞台上有多个该影片剪辑的实例,则在渲染该影片剪辑的正确帧时似乎存在问题。我可以理解,有时可能无法及时渲染帧以供代码引用该帧上的对象,但肯定在 flash 渲染下一帧之后,所有剪辑都应该显示帧上的内容!!?我很难相信 flash 的基本概念之一 - 时间线影片剪辑 - 在 as3 中似乎不能 100% 工作。

现在我希望有一个有用的答案...

我设法解决这个问题的唯一方法是使用源图像影片剪辑类(隐藏在舞台上或只是在库中的代码中创建)。然后我可以只在一个影片剪辑上使用 gotoAndStop,根据需要使用 BitmapData 类多次绘制它,并将这些图像添加到我需要的显示对象中。

【讨论】:

以上是关于AS3 goToAndStop() 错误?的主要内容,如果未能解决你的问题,请参考以下文章

As3 gotoAndStop 一个输入帧中的多个调用

ActionScript 3 AS3 gotoAndStop下一帧有循环

将 AS2 代码转换为 AS3 格式

AS3.0 给addEventListener里的方法加上参数传递

自动转到下一个场景,无需单击按钮 as3

Flash as3如何通过鼠标事件停止播放子电影剪辑?