加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash – Button内的实例名称问题

发布时间:2020-12-15 07:25:49 所属栏目:百科 来源:网络整理
导读:我在Flash中创建了一个按钮,在里面我有一个TextField和一个MovieClip,两者都设置了实例名称.它们覆盖按钮的所有4个框架,没有关键帧. 我发现我无法使用我设置的实例名称访问对象,所以我使用这段代码来查看发生了什么: var obj:DisplayObject = this.m_graphi
我在Flash中创建了一个按钮,在里面我有一个TextField和一个MovieClip,两者都设置了实例名称.它们覆盖按钮的所有4个框架,没有关键帧.

我发现我无法使用我设置的实例名称访问对象,所以我使用这段代码来查看发生了什么:

var obj:DisplayObject = this.m_graphics.btnChange.upState;
for ( var i:int = 0; i < obj.numChildren; i++ )
{
    trace( "We have an object at " + i + " - " + obj.getChildAt( i ) + ": " + obj.getChildAt( i ).name );
    var t:TextField = obj.getChildAt( i ) as TextField;
    if ( t == null )
        continue;

    trace( "  The textfield has text '" + t.text + "' );
}

我得到这个作为输出:

We have an object at 0 - [object Shape]: instance195
We have an object at 1 - [object TextField]: instance199
  The textfield has text 'Change'
We have an object at 2 - [object MovieClip]: instance203

所以他们有TextField和MovieClip,他们只是将他们的实例名称重置为通用“实例###”.

谁知道问题是什么?如果我使按钮成为MovieClip,它工作正常(虽然我必须自己控制帧).

我知道可以用来解决这个问题的不同方法,但这意味着要改变很多东西,我想知道为什么SimpleButton会忽略Flash中设置的实例名称

编辑

进一步研究一下,似乎即使Flash IDE中的按钮没有关键帧,Flash也会为每个项创建4个实例(例如,通过upState进行跟踪会给我一个实例名为“instance2”的TextField,而在downState中,实例名称是“instance4”).如果我在一个状态下更改文本,则不会反映在其他状态中.

我在想,当Flash创建对象时,它不会正确地复制所有属性(即实例名称)

编辑

我同意Shane的回答是一个解决方法 – 我自己说过我知道解决这个问题的不同方法 – 但它忽略了问题,它没有解决它(这是我没有解决的唯一原因)接受它).我首先来到SO,看看是否有人知道为什么它首先发生(tbh,它似乎是SDK中的一个错误).

我也理解“你不应该在SimpleButton中访问孩子;如果你想要更多控制,使用Sprite或MovieClip”这一论点背后的原因,但我不同意. Flash IDE允许您创建其中包含命名实例的按钮,而SimpleButton文档允许您访问不同的状态,因此对我来说,这是可接受的行为.如果SimpleButton只能用于非常基本的,不可更改的静态按钮(也可以考虑本地化),那么它就没用了.你可以使用Sprite和MovieClip,但是你必须自己控制不同的状态,这会变得很尴尬.我有自己的Button类来处理样板,但我不应该重写基本的SDK功能,这就是为什么对我来说这是一个bug.

我将保持赏金开放的时间.如果我什么也得不到,那么我会把它交给谢恩.

解决方法

这是因为flash.display.SimpleButton类不从DisplayObjectContainer继承,并且状态容器也不是DisplayObjectContainers: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/SimpleButton.html

基本上,简单按钮的定义很简单.如果想要对内部对象进行更复杂的控制,则必须使用将ButtonMode设置为true的Sprite或MovieClip.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读