又大又圆 发表于 2019-1-15 11:35:18

Flash里面,不同的类不能使用相同的实例名吗?

在舞台创建两个按钮,一个是默认的SimpleButton类。另一个自定义MyButton类,基类是SimpleButton类。




把他们放到舞台上,第一帧放上默认的按钮类,实例名设置为btn1。
然后在第二帧放上自定义的MyButton类,实例名也设置成btn1,但运行之后编译器就会报错
场景 1, 图层'图层_1', 帧 1        警告: 实例名称 'btn1' 在类型为 flash.display.SimpleButton 的对象上声明,但是在类型为 MyButton 的对象上使用实例名称 'btn1' 有冲突。

看说明是因为不同类用了相同实例名引起的,这是为什么呢?有解决方案吗?





心羽 发表于 2019-1-15 11:35:19

原理应该是类似T大说的,不过并非运行期间检测,而是在编译过程中检查舞台上所有元件(无论第几帧)是否有冲突,是否有调用未声明的对象等等。
我的理解是Flash会自动生成一个类,插入舞台上所有元件作为属性,并声明成对应类型。
所以并不是说两种元件就不可能用同一个命名了。只要在舞台上拥有这两种元件实例之前在代码中声明一下这个变量名称即可。

比如第一帧中声明:
var testObj:*;
这样在舞台上放名称为testObj的影片剪辑或按钮都不会报错,只有一个可以忽略的警告信息。因为已经自己声明过这个变量,元件与变量同名而且类型可以成功转换过来,就没问题了。

雪原xy 发表于 2019-1-15 12:31:47

想看看标准答案!
个人认为不太可能,
因为如果名字一样,编译器怎么分辨呢?

TKCB 发表于 2019-1-15 20:04:34

会冲突的吧。
Flash Player运行到第一帧,时候发现一个btn1对象,它记录下来了。
到第二帧的时候,它会检测关键帧里面的对象,如果是相同命名,它就会觉得是之前记录的那个 btn1 对象。然后它会把第一个btn的属性赋给第二帧的 btn1,这时候如果不是一个对象,可能会出错的。

之所以这样,应该是因为机制的原因导致的。
Flash player 的运行机制是,后面帧上的对象后继承前面帧上的对象的属性状态。。

我想是这样的,具体需要自己实践~~

ganggang_lantia 发表于 2019-1-22 09:34:42

在同一个容器里,肯定不能,在不同的容器里是可以的

jerehgxl 发表于 2019-4-3 10:54:55

如果是不同的影片剪辑里是可以有同样的实例名,但是同一个容器内,是不能有同样的实例名的。

kofjjq 发表于 2019-4-3 11:06:39

同一个影片剪辑里面肯定是不允许有2个同样的实例名的{:1_96:}

墨海雪浪 发表于 2019-4-3 19:19:07

向大神学习!

又大又圆 发表于 2019-4-4 09:33:59

kofjjq 发表于 2019-4-3 11:06
同一个影片剪辑里面肯定是不允许有2个同样的实例名的

在不同帧内是可以有的,但是给元件添加了自定义类就会有编译器错误

lazy_yu 发表于 2019-4-12 09:33:52

在同一个fla 里面不能,在不一样的swc 或者swf 下能
页: [1] 2
查看完整版本: Flash里面,不同的类不能使用相同的实例名吗?

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)