| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > Flash经验技巧 > 文章正文 用户登录
如何加入透明Flas
为新浪博客添加fl
flashget下载联盟
265联盟:“Flash
新易网络提供100M
龙太极/100m/asp/
无限网络提供50M 
霞光科技50M/Htm/
苏能科技100M/FTP
悠博科技50M/FTP/

flash中的stop之bug篇           

flash中的stop之bug篇

作者:佚名 来源:闪吧 作者: drmingdrme 更新:2007-1-13 20:57:09 错误报告 我要投稿

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帧并停止。

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。