Flash里面,不同的类不能使用相同的实例名吗?
在舞台创建两个按钮,一个是默认的SimpleButton类。另一个自定义MyButton类,基类是SimpleButton类。把他们放到舞台上,第一帧放上默认的按钮类,实例名设置为btn1。
然后在第二帧放上自定义的MyButton类,实例名也设置成btn1,但运行之后编译器就会报错
场景 1, 图层'图层_1', 帧 1 警告: 实例名称 'btn1' 在类型为 flash.display.SimpleButton 的对象上声明,但是在类型为 MyButton 的对象上使用实例名称 'btn1' 有冲突。
看说明是因为不同类用了相同实例名引起的,这是为什么呢?有解决方案吗?
原理应该是类似T大说的,不过并非运行期间检测,而是在编译过程中检查舞台上所有元件(无论第几帧)是否有冲突,是否有调用未声明的对象等等。
我的理解是Flash会自动生成一个类,插入舞台上所有元件作为属性,并声明成对应类型。
所以并不是说两种元件就不可能用同一个命名了。只要在舞台上拥有这两种元件实例之前在代码中声明一下这个变量名称即可。
比如第一帧中声明:
var testObj:*;
这样在舞台上放名称为testObj的影片剪辑或按钮都不会报错,只有一个可以忽略的警告信息。因为已经自己声明过这个变量,元件与变量同名而且类型可以成功转换过来,就没问题了。 想看看标准答案!
个人认为不太可能,
因为如果名字一样,编译器怎么分辨呢?
会冲突的吧。
Flash Player运行到第一帧,时候发现一个btn1对象,它记录下来了。
到第二帧的时候,它会检测关键帧里面的对象,如果是相同命名,它就会觉得是之前记录的那个 btn1 对象。然后它会把第一个btn的属性赋给第二帧的 btn1,这时候如果不是一个对象,可能会出错的。
之所以这样,应该是因为机制的原因导致的。
Flash player 的运行机制是,后面帧上的对象后继承前面帧上的对象的属性状态。。
我想是这样的,具体需要自己实践~~ 在同一个容器里,肯定不能,在不同的容器里是可以的 如果是不同的影片剪辑里是可以有同样的实例名,但是同一个容器内,是不能有同样的实例名的。 同一个影片剪辑里面肯定是不允许有2个同样的实例名的{:1_96:} 向大神学习! kofjjq 发表于 2019-4-3 11:06
同一个影片剪辑里面肯定是不允许有2个同样的实例名的
在不同帧内是可以有的,但是给元件添加了自定义类就会有编译器错误 在同一个fla 里面不能,在不一样的swc 或者swf 下能
页:
[1]
2