由于某种原因,在一个实例中,我无法让goToAndStop(2)转到并停留在影片剪辑的第二帧上,该影片剪辑有两个帧,并且已加载!
我将movieclip添加到类的构造函数的舞台上。然后点击button1我将帧更改为第2帧,然后点击button2返回第1帧。
他们都没有工作.....
但是..如果在构造函数上将movieclip设置为goto frame 2,那么它会在第2帧启动,当我点击button1它停留在第2帧时(因为我告诉它转到第2帧)然后点击button2成功将其更改为第一帧。然后我可以再次点击button1并将其更改为第二帧。
从构造函数中删除_movie.gotoAndStop(2),但没有一个能再次起作用。
public function changeBackground($frame:int):void
{
trace('gotoFrame', $frame);
_movie.gotoAndStop($frame);
trace('currentFrame',_movie.currentFrame);
}
按钮1单击输出
gotoFrame 2
currentFrame 2
按钮2单击输出
gotoFrame 1
currentFrame 1
所以它说它在正确的框架上,但显示不然!
舞台上绝对只有这个类的一个实例
答案 0 :(得分:1)
好的,首先有点咆哮......
我还在AS3中发现了gotoAndStop的一些令人沮丧的问题。如果在舞台上存在多个该影片剪辑的实例,则在渲染影片剪辑的正确帧时似乎存在问题。我可以理解,有时框架可能无法及时呈现,以便代码引用该框架上的对象,但是在flash渲染下一帧之后,所有剪辑都应该显示框架上的内容!!我发现很难相信闪存的一个基本概念 - 时间轴电影剪辑 - 似乎在as3中不能100%工作。
现在我希望得到一个有用的答案......
我设法解决这个问题的唯一方法是使用源图像影片剪辑类(隐藏在舞台上或刚刚从库中的代码中创建)。然后我可以在一个影片剪辑上使用gotoAndStop,根据需要使用BitmapData类多次绘制它,并将这些图像添加到我需要的显示对象中。
答案 1 :(得分:0)
首先,请删除变量中的$。它们不是为了可读性而需要的,只会减慢你的速度。
其次,不要假设gotoAndStop中存在错误。虽然有可能,但有数千甚至数百万的Flash游戏使用这种方法没有问题。我不是说要责骂,但我希望你能记住这一点,因为许多程序员追逐鬼......认为错误是一种语言问题。
既然你说构造函数更改框架只是找到,我认为你的_movie与按钮不同。尝试更改_movie的位置,看看你是否正在与正确的对象交谈。
此外,这个问题可能是因为舞台没有足够快地失效: AS3 - gotoAndStop with immediate action
答案 2 :(得分:-2)
我倾向于通常使用$
前缀传递给函数的变量,_
用于私有函数或类的变量,并且没有公共变量的前缀,个人偏好,我不共享我的代码所以没关系。并且事实证明这是我使用的特定版本的Flex与FlashDevelop ...并且快速更新的问题,并且一切正常,它在不同的对象上被击中和错过它是否真的gotoAndStop
框架与否......