flash中的stop之bug篇
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-12
Flash最简单语句之一,stop,经考验,存在bug,如下: stop语句的功能是停止当前(this)动画的播放,停止在当前帧。 但是有1些例外,使得动画所停止的位置并非执行stop语句所在的帧位置。如在第1帧运行stop,可能会停在第2帧。 以下例子: 建立1个空fla文件,在第1帧写: stop(); trace(_currentframe);//显示所在帧的位置。 在第7帧插入1个空关键帧,写下如下代码: this.onEnterFrame=function (){ this.gotoAndPlay(2); this.onEnterFrame=undefined; trace("enterFrame"); } 这些语句使动画跳转到第2帧。 完成后在flash ide中测试该文件,首先output面板中显示 1 这时flash停在第1帧,是正确的;然后按下回车,使主场经动画继续播放,这时,在output面板中显示的是 1 enterframe 2 如果将第7帧中的goto改称this.gotoAndPlay(3),output面板中就会显示3. 这是stop语句的bug,使得动画停在错误的位置。究其原因,其实都是事件处理函数引起的,纯粹的帧AS不会出现这种问题。 问题出现的地方从第7帧开始,这1帧中,我们设置了1个onEnterFrame函数,并在函数的最后删除的函数自己,他的功能是使得函数体只执行1次,而且,onEnterFrame函数被设置后不会马上执行,下1帧才会起作用,所以,这段as的功能也是延迟1帧执行某些操作(很多AS代码中都用到了这个)。 所以,当动画再回到第1帧时,flash要执行2部分代码,1个是onEnterFrame得函数体,1个是帧代码。但通常,帧代码是在事件处理代码后面执行的,第1帧的所有代码就为: this.gotoAndPlay(2); stop(); 而且,as的运行方法是先把所有的代码放入1个队列,然后逐次运行。所以,虽然首先跳转到了第2帧,但第1帧的stop仍然会执行,以致最后的结果就是停在了第2帧。 这个bug也由其他的事件处理函数引起,如onKeyDown等。产生这个问题的根本原因就是stop所在的帧位置和当前实际的帧位置不同。也就是说,_currentframe属性和stop语句的帧位置不同,所以,我们可以通过判断_currentframe属性的值来避免这个bug。 当flash执行晚onEnterFrame中的this.gotoAndPlay(2)时,_currentframe已经被指定为2,这个是正确的,只需将第1帧 语句改称: if (_currentframe==1) stop(); 就可以避免stop停止在错误的位置。根据需要,也可以改成: gotoAndStop(1); 即,无论在什么地方,都回到第1帧并停止。 关键词: |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 人物绘画教程下一篇: 一步一步学ActionScript 2.0
关于flash中的stop之bug篇的所有评论