【转载】flash时间轴中变量的作用域

 

序言:使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值