flash ActionScript 的全局变量该在哪声明?
有两个场景,代码如下场景1(CJ1)第一帧:if(a!=0){b._visible=true;}else{b._visible=false;}场景2(CJ2)第一帧:a=...
有两个场景,代码如下
场景1(CJ1)第一帧:
if(a!=0){
b._visible=true;
}else{
b._visible=false;
}
场景2(CJ2)第一帧:
a=1;
gotoAndPlay("CJ1",1)
那么,我的_global.a=0;该在哪声明呢?
放在场景1第一帧行吗?那么这样回到场景1第一帧a=啥? 展开
场景1(CJ1)第一帧:
if(a!=0){
b._visible=true;
}else{
b._visible=false;
}
场景2(CJ2)第一帧:
a=1;
gotoAndPlay("CJ1",1)
那么,我的_global.a=0;该在哪声明呢?
放在场景1第一帧行吗?那么这样回到场景1第一帧a=啥? 展开
2个回答
展开全部
fionafql(Adobe的社区经理也叫Fiona的,哈哈)的回答是错的。你的第二段代码功能是可以实现的。但你_global的用法是完全错误的。
用帮助文档中的话说:“设置全局变量的值时,必须使用该变量的完全限定名称,例如,_global.variableName。否则,将创建一个同名的局部变量,该局部变量将屏蔽您所设置的全局变量。”
参见:ActionScript 2.0 语言参考 / ActionScript 语言元素 / 全局属性 / _global 属性
网址:
http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/2/help.html?content=Part1_Learning_AS2_1.htm
(参考资料居然有字数限制?汗……难道网址可以只写一半的?)
也就是说:在你的代码中所有a,都应该写成_global.a。
而你现在的写法,实际上在第二帧的第一行创建了一个名为a的时间轴变量。之后的所有操作都是针对这名为a的时间轴变量的。
如果不相信,你可以trace一下。
trace(a);
trace(_global.a);
你会发现不论你怎么改a的值,_global.a的值永远等于0!
不过,以前用AS 2.0做开发的时候(很久很久之前的事情了),我是禁止公司的开发工程师使用_global的,因为容易冲突;fionafql所说的_root也是禁止使用的,因为这样一旦被别的文件加载,_root会指向加载器。如果用lockroot,会让事情变得无法控制。当年他们因为这个恨死我了。哈哈……但最后证明我是对的。
当然,这通常是专业的开发工程师考虑的问题了,你不用考虑那么多。
用帮助文档中的话说:“设置全局变量的值时,必须使用该变量的完全限定名称,例如,_global.variableName。否则,将创建一个同名的局部变量,该局部变量将屏蔽您所设置的全局变量。”
参见:ActionScript 2.0 语言参考 / ActionScript 语言元素 / 全局属性 / _global 属性
网址:
http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/2/help.html?content=Part1_Learning_AS2_1.htm
(参考资料居然有字数限制?汗……难道网址可以只写一半的?)
也就是说:在你的代码中所有a,都应该写成_global.a。
而你现在的写法,实际上在第二帧的第一行创建了一个名为a的时间轴变量。之后的所有操作都是针对这名为a的时间轴变量的。
如果不相信,你可以trace一下。
trace(a);
trace(_global.a);
你会发现不论你怎么改a的值,_global.a的值永远等于0!
不过,以前用AS 2.0做开发的时候(很久很久之前的事情了),我是禁止公司的开发工程师使用_global的,因为容易冲突;fionafql所说的_root也是禁止使用的,因为这样一旦被别的文件加载,_root会指向加载器。如果用lockroot,会让事情变得无法控制。当年他们因为这个恨死我了。哈哈……但最后证明我是对的。
当然,这通常是专业的开发工程师考虑的问题了,你不用考虑那么多。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询