zoukankan      html  css  js  c++  java
  • Flash as3 基础:AS3中的getChildByName(转)

    在AS3中,我们可以用getChildByName来获取一个元件,但是要注意返回的类型是DisplayObject,这样一旦我们的元件中有一些自定义的方法就不能使用了。

     

    比如我有一个类Ball,Ball有一个方法move,那么我可以这样写:

    var b:Ball=new Ball();

    addChild(b);

    b.move();//这样没问题

    getChildByName(”b”).move();//这样编译时会报错

    其原因应该就是getChildByName返回的类型是DisplayObject,而并不是Ball,所以无法调用Ball的方法。

    如果这样写:

    var c:Ball= getChildByName(”b”) as Ball;

    c.move();

    这样就没问题了,编译通过,可以调用Ball的方法。

     

    下面是我自己的总结:

    getChildByName方法是用于元件动态命名时的。例如:在场景中有一个元件,在属性面板中对其命名为cc,在对其操作时就可以写 cc.y=XXX;而动态命名时,就如上面的例子,场景中本没有这个元件,用addChild将其放到场景中时再对其命名,这时要对这个元件进行操作就要 用到getChildByName了,再举例如下:

    var b:Ball=new Ball()

    addChild(b)

    b.name="mc1"

    getChildByName("mc1").y=200

     

    补充:

    例如场景中有一元件mc1,现在用一个字符串来表示它,并且利用这段字符串来调用它的属性或方法:

    var cc="mc1"

    getChildByName(cc).XXX

    这时如果是自定义的属性或方法的话,会报错,因为AS3认不出来被操作的对象是何类型的,这就需要我们来告诉它,有两种方法解决这个问题:

    一、将getChildByName(cc)改成MovieClip(getChildByName(cc)),意思是先用getChildByName将cc这个字符串变成DisplayObject,然后再将它变为MovieClip,这时AS3认出它是一个MovieClip了,就可以访问它的属性和调用它的方法了。

    二、将语句写成:

    var cc:MovieClip=mc1

    this["cc"].XXX

     

    另外还有一种字符串的写法:

    var cc=mc1.name

    this["cc"].XXX

    这里mc1.name必须是在属性面板里命名的,而不是mc1.name="XXX"命名的

    []在这里就是动态的意思,被操作的对象的类型是动态的,这样就可以绕过AS3的编译器了

    来自:http://blog.sina.com.cn/s/blog_4c4189520100c6qb.html

     

    下面是自己写的段代码:

    //==create items text ==
     for (var _item=0; _item<6; _item++) {
      var txtItem:TextField=new TextField();
      txtItem.text=arrItemName[_item];
      txtItem.x=155+_item*85;
      txtItem.y=552;
      var o:TextField=new TextField();
      o=getChildByName("txtItem"+_item.toString()) as TextField;
      o.addEventListener(MouseEvent.CLICK,createStatisticalGraph);
      addChild(o);
      arrObjects.push(o);
     }

  • 相关阅读:
    Qt 让QLabel自适应text的大小,并且自动换行(转)
    /usr/local/lib/libz.a: could not read symbols: Bad value(64 位 Linux)
    HDU 3605 Escape(最大流)
    HDU 4507 吉哥系列故事——恨7不成妻(数位DP)
    HDU 2883 kebab (最大流)
    SPOJ 10606. Balanced Numbers (数位DP)
    HDU 3338 Kakuro Extension(最大流)
    HDU 3081 Marriage Match II (最大流+二分+并查集)
    HDU 2732 Leapin' Lizards(最大流)
    HDU 3709 Balanced Number ZOJ 3416 Balanced Number(数位DP)
  • 原文地址:https://www.cnblogs.com/hakuci/p/2010477.html
Copyright © 2011-2022 走看看