序言:使用actionscript3开发的童鞋都不可避免的要使用到flash cs系列软件进行开发,也会觉得在时间轴上写脚本感觉会事半功倍。这时候不得不注意的一点是在时间轴上声明变量要注意的问题,不然很多从flex转过来的同学会非常的苦恼哦。

本文内容转载自:http://blog.163.com/lzx_wyh/blog/static/36947539200762792227239/

1 一个附着在单独时间轴上的变量只能被该时间轴上的脚本直接访问。

2 可以使用对象类来模拟全局变量。为了创建在所有时间轴上都可用的变量,使用以下语句:
    Object.prototype.myGlobalVariables = myValue;

例如:
    Object.prototype.msg = “Hello, world!”;

最后:建议大家在声明变量的时候最好使用文档类里面进行声明,在时间轴上再使用,可以避免许多的麻烦。函数也亦同。

此前,我们将变量附着在Flash文档主时间轴的某个单独帧上,并籍此学习了如何创建变量并取回变量的值。当某个电影文档中包含多个帧以及多个电影剪辑时间轴时,变量的创建和值的取回就变得略微复杂了。

为了清楚地阐释,我们提出几个设想。

1.设想一
假设我们在时间轴的第一帧上创建一个变量x,随后将其值设置为10:
    var x;
    x = 10;

接着,在下一个帧(帧二)中,我们附着下列代码:
    trace (x);

当我们测试电影时,在Output窗口中会出现什么?我们在帧一中创建变量,而试图在帧二中取回它的值,我们的变量仍然存在吗?

答案:是的。

提示:当你在某个时间轴上定义了某个变量之后,你可以在该时间轴的任何帧上访问这个变量。

2.设想二
假设我们创建并设置变量x,不过和设想一不同的是,我们并不把变量设置代码直接放置在第一帧中,取而代之的是将这些代码放置在帧一中的某个按钮上。接着,在帧二中,我们加入与设想一同样的代码:
    trace (x);

设想二也能正常工作吗?

答案:是的。因为变量x被附着在按钮上,而按钮又附着在主时间轴上,可以推理出变量x间接地附着在主时间轴上;因此,我们可以象设想一那样在帧二中访问该变量。

3.设想三
假设我们在主时间轴的第一帧上创建名为secretPassword的变量。当电影运行时,为了获得该电影中某个特定区域的访问权,用户必须输入正确的密码。

除了在帧一中声明变量secretPassword之外,我们还要创建一个函数;该函数校验用户的输入是否与真正的密码相吻合。下面是该脚本代码:
    var secretPassword;
    secretPassword = “yppah”;

function checkPassword () {
        if (userPassword == secretPassword) {
            gotoAndStop (”accessGranted”);
        } else {
            gotoAndStop (”accessDenied”);
        }
    }

假设我们在第三十帧处要求用户输入他的密码。为了获得访问权,用户将密码输入到一个名为userPassword的输入文本域(input text field)变量中;然后我们在帧一的脚本中用函数checkPassword ()对比变量secretPassword和上述输入文本域变量userPassword是否一致。如果我们的密码校验代码被定义在第一帧上,而变量userPassword直到第三十帧才被定义,那么当我们调用checkPassword ()函数时,变量userPassword存在吗?

答案依然是:是的。即使userPassword被定义在函数checkPassword ()所在帧之后的帧上,它们仍处于同一个时间轴。

提示:在某个时间轴上声明的任何变量对于该时间轴上的所有脚本来说都是可用的 —— 只要该时间轴还存在。

4.变量的可访问性(作用域)
上述提出的三个设想探索了有关作用域的问题。一个变量的作用域描述了该变量在何时以及在何处能被电影中的代码所操作。一个变量的作用域定义了该变量的生存期以及脚本中的其他代码块对它的可访问性。为了确定变量的作用域,我们必须回答两个问题:(1)变量能存在多长时间?(2)在我们的代码中,从哪里能够设置并取回变量的值?

在传统的编程语言中,变量通常被分为两种常规的作用域类型:全局的和局部的。在整个程序中,从任何地方都可以访问的变量称之为全局变量。在整个程序中,只有在有限的一个或几个部分的内部才可以访问的变量称之为局部变量。尽管Flash支持传统的局部变量,但是它并不支持真正的全局变量。让我们来揭示这是为什么。

5.电影剪辑变量
就象我们在前面的三个设想中看到的那样,定义在某个时间轴上的变量对于该时间轴上的所有脚本来说都是可用的 —— 从第一帧到最后一帧 —— 无论该变量被声明在一个帧中或是一个按钮上。但是,如果某个电影中有多个时间轴时会发生什么?是设想四中描述的那样吗?

5.1设想四
假设我们有两个基本的几何图形,一个正方形和一个圆形,都被定义为电影剪辑符号。

在正方形电影剪辑符号的第一帧,我们设置变量x为3:
    var x;
    x = 3;

在圆形电影剪辑符号的第一帧,我们设置变量y为4:
    var y;
    y = 4;

我们将这两个电影剪辑符号的实例放置在电影文档主时间轴的第一层第一帧上,并将这两个实例分别命名为square和circle。

第一个问题:如果我们将下列代码附着在主时间轴的第一帧上(square和circle的所在帧),在Output窗口中会出现什么?
    trace (x);
    trace (y);

答案:Output窗口中什么也不会出现(或出现两个undefined)。变量x和变量y被定义在各自的电影剪辑时间轴中,而非主时间轴中。

提示:附着在某个电影剪辑时间轴上的变量的作用域被限制在该时间轴中。其他时间轴上的脚本(比如本例中主时间轴上的两个trace ()命令)无法直接访问该变量。

第二个问题:如果我们将trace (x)和trace (y)这两个语句放置在square电影剪辑的第一帧上从以取代放置在主电影时间轴的第一帧上,那么在Output窗口中会出现什么?

答案:Output窗口只会出现变量x的值,也就是3,而没有其他东西出现(或者出现3和一个undefined)。变量x的值能够被显示是因为x定义在square电影剪辑的时间轴上,因此能被位于同一时间轴上的trace ()命令所访问。而变量y的值,也就是4,无法在Output窗口中出现,这是因为变量y被定义在circle中,也就是说处于另外一个单独的时间轴上,因此对于处在square电影剪辑时间轴上的trace ()命令来说它是不可见的。

此前,我说过ActionScript不支持真正的全局变量,而现在,你应该可以理解这是为什么了。全局变量是在整个程序中都可以访问的变量,但是在Flash中,一个附着在单独时间轴上的变量只能被该时间轴上的脚本直接访问。因为Flash中的所有变量都定义在各个时间轴上(直接地或间接地),所以没有哪个变量可以保证被电影中的所有脚本直接访问,因此,没有哪个变量能被合理地称为全局变量。

为避免混淆,我们将附着在时间轴上的变量称为“时间轴变量”或“电影剪辑变量”。

不过,使用对象类来模拟全局变量是可能的。为了创建在所有时间轴上都可用的变量,使用以下语句:
    Object.prototype.myGlobalVariables = myValue;

例如:
    Object.prototype.msg = “Hello, world!”;

最后:建议大家变量和方法的声明都写在文档类里面,这样可以避免很多闹心的问题,使用起来也方便明了。

转载于:https://www.cnblogs.com/JokerCoder/archive/2013/04/04/2999821.html

【转载】flash时间轴中变量的作用域相关推荐

  1. 《Adobe Flash CS5中文版经典教程》——1.5 在“时间轴”中组织图层

    本节书摘来自异步社区<Adobe Flash CS5中文版经典教程>一书中的第1章,第1.5节,作者: [美]Adobe公司 更多章节内容可以访问云栖社区"异步社区"公 ...

  2. python中变量的作用域有几种_Python中变量的作用域(variable scope)

    http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...

  3. C语言中变量的作用域

    C语言中变量的作用域 C语言中所有变量都有自己的作用域,申明变量的类型不同,其作用域也不同.C语言中的变量,按照作用域的范围可分为两种, 即局部变量和全局变量. 一.局部变量 局部变量也称为内部变量. ...

  4. 深圳软件测试培训:JavaScript中变量和作用域

    深圳软件测试培训:JavaScript中变量和作用域 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量不是强制类型的,决定了它只是在特定时间用于保存特定值的一个名字而已. ...

  5. java中变量的作用域

    java中变量的作用域 变量一定会被定义在某一对大括号中,该大括号所包含的代码区便是这个变量的作用域.变量分为四个级块:类级 ,对象实例级 ,方法级 ,块级 类级:所谓的全局变量,需要使用static ...

  6. python函数中变量的作用域_Python中变量的作用域(variable scope)

    此文目的 此文主要讨论和总结一下,Python中的变量的作用域(variable scope). 目的在于,通过代码,图解,文字描述,使得更加透彻的了解,Python中的变量的作用域: 以避免,在写代 ...

  7. 很实用的PR视频剪辑教程:如何在Adobe Premiere Pro Mac时间轴中使用标记

    如果你想要进行视频后期处理,千万不要错过Adobe Premiere Pro Mac这款强大的视频编辑软件哦,premiere pro 能够满足用户的任何视频编辑需求!今天教大家如何在Adobe Pr ...

  8. flash时间轴控制命令

    在Flash动画脚本中,控制影片播放的命令包括 play.stop.gotoAndPlay.gotoAndStop等,下面我们将分别对这些命令进行介绍.1. play(播放)stop(停止)命令通过为 ...

  9. c语言变量作用域生命周期,C/C++——C++变量的作用域与生命周期,C语言中变量的作用域和生命周期...

    谭浩强书: 从存储模型可以看到,谭浩强和钱能的模型有一定的对应关系: 静态存储区  ->  全局数据区 动态存储区  ->  栈(stack) 变量的类型: 1. 局部变量和全局变量 局部 ...

最新文章

  1. 超轻量级中文OCR,支持竖排文字识别、ncnn推理,总模型仅17M
  2. linux 服务器拦截http请求,详解Linux屏蔽浏览器上http请求警报的方法
  3. js中的SetTimeOut
  4. linux系统管理常用命令
  5. Spotlight监控工具使用
  6. 利用 CSS animation 和 CSS sprite 制作动画
  7. 集合python_python集合访问的方法
  8. 实操《深入浅出React和Redux》第一期
  9. Jenkins 学习总结(8)—— Jenkins X 入门实践
  10. 解决Apex英雄下载慢、origin平台下载打开的究极3种方法
  11. 微信小程序 腾讯云ocr 身份证识别
  12. JAVA查搜索文件内容
  13. 计算机键盘静音键咋不亮,键盘上的声音开关键不能用为什么
  14. hadoop文件存储位置_hadoop – HDFS存储数据的位置
  15. PPT超实用的23个快捷键
  16. 【深度学习】 为Tesla K40c(显卡算力小于3.5)安装pytorch(要求显卡算力3.7以上)笔记
  17. 如何使用外部控件来管理Web报表属性
  18. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第三步---编辑器(2)---更方便更多操作更像编辑器
  19. SwiftUI 跨组件数据传递
  20. python学习 番外篇之模块

热门文章

  1. iOS10 推送通知 UserNotifications
  2. layer.js弹窗组件layer.prompt无法调用解决
  3. 在linux中制作IOS文件
  4. 洛谷 - P2045 - 方格取数加强版 - 费用流
  5. wxPython的简单应用
  6. 基础篇:如何做一名专业的软件测试工程师
  7. shell中通过sed替换文件中路径
  8. js高级程序设计--AJAX JSON
  9. springmvc + jquery 错误.ClassNotFoundException: org.apache.taglibs.standard.tlv.JstlCoreTLV
  10. java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver