通过AS 3

时间:2015-06-18 05:15:24

标签: actionscript-3 flash

我是AS3编程新手(刚刚学习) 我正在尝试创建一个FB样式菜单图标,该图标应在悬停时设置动画。 图标本身是一个MovieClip,由Bg MovieClip和3个水平线MovieClip组成。 (我已拆分它们以便使用AS3为每个剪辑设置动画)

我正在使用ActionScript实例化并将Parent添加到我的舞台。

我面临的问题是我无法访问子剪辑,因为我没有单独实例化它们(但它们出现在舞台上)。我尝试访问它时收到以下错误。

  

场景1,图层'动作',第1帧,第25行,第14列1119:通过静态类型MenuIcon的引用访问可能未定义的属性menuBg_mc。

我还尝试在Parent Constructor Class中实例化子节点并尝试引用它们。出现以下错误:

  

场景1,图层'动作',第1帧,第25行,第14列1119:通过静态类型MenuIcon的引用访问可能未定义的属性menuBg_mc。

请您指导一下我必须做什么以及为什么? 我附上了我使用的AS3代码。

第1帧中的

Actionscript

import flash.display.MovieClip;
import flash.events.Event;

var menuIcon_mc: MenuIcon = new MenuIcon();

addChild(menuIcon_mc);

menuIcon_mc.addEventListener(MouseEvent.MOUSE_OVER, hoverAnimate);

function getChildrenof(container:DisplayObjectContainer):Array {
    var temp:Array = [];
    var containerChildren:Number = container.numChildren;
    trace(containerChildren);
    for (var i:int = 0; i<containerChildren; i++) {
        temp.push(container.getChildAt(i));
    }
    return temp;
}

function hoverAnimate(event: Event): void {
    menuIcon_mc.menuBg_mc.alpha = 0.5;
}

MenuIcon构造函数类

package  {
    import flash.events.Event;
    import flash.display.MovieClip;

    public class MenuIcon extends MovieClip {

        public function MenuIcon() {
            var menuBg_mc:MenuBg = new MenuBg();
            var menuLineTop_mc:MenuLines = new MenuLines();
            var menuLineCenter_mc:MenuLines = new MenuLines();
            var menuLineBottom_mc:MenuLines = new MenuLines();
        }

    }

}

使用的是Actionscript 3和Flash Professional CC(15.0.0.173)

嗨,ÖzgürErsil。谢谢。我试过你的建议,声明现在似乎很好。 我的问题是我不知道如何访问孩子来修改他们的属性。

package {
  import flash.events.MouseEvent;
  import flash.display.MovieClip;

  public class MenuIcon extends MovieClip {
    public
    var menuBg_mc: MenuBg;
    public
    var menuLineTop_mc: MenuLines;
    public
    var menuLineCenter_mc: MenuLines;
    public
    var menuLineBottom_mc: MenuLines;

    public
    function MenuIcon() {
      this.buttonMode = true;
      this.addEventListener(MouseEvent.MOUSE_OVER, hoverBtn);
    }
    private
    function hoverBtn(e: MouseEvent): void {
      //Changing Child property
      this.menuBg_mc.alpha = 0.5;
    }
  }
}

执行hoverBtn()时出错:

  

TypeError:错误#1009:无法访问null的属性或方法   对象参考。在MenuIcon / hoverBtn()

我也尝试将子类的基类更改为MenuIcon类。但这似乎也不起作用。

我不清楚为什么会这样。如果有一个包含多个子节点的父剪辑,是应该单独实例化子节点还是实例化父剪辑就足够了?如果没有,我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

这是因为您的menuBg_mc被定义为函数变量,而不是公共变量。 MenuIcon类应该如下所示,因为您的动画片段应该是公共变量,您可以从其他类到达它们。

package  {
    import flash.events.Event;
    import flash.display.MovieClip;

    public class MenuIcon extends MovieClip {

       public var menuBg_mc:MenuBg;
       public var menuLineTop_mc:MenuLines;
       public var menuLineCenter_mc:MenuLines;
       public var menuLineBottom_mc:MenuLines;

       public function MenuIcon() {
          menuBg_mc = new MenuBg();
          menuLineTop_mc = new MenuLines();
          menuLineCenter_mc = new MenuLines();
          menuLineBottom_mc = new MenuLines();
       }
    }
}