2015-06-18 4 views
0

Я новичок в программировании AS3 (только обучение) Я пытаюсь создать значок меню стиля FB, который должен анимироваться при наведении. Значок - это MovieClip и состоит из Bg MovieClip и 3 горизонтальных линий MovieClips. (Я разделил их так, чтобы анимировать каждый клип, используя AS3)Доступ к детям из MovieClip, когда родитель добавлен динамически через AS 3

Я создаю экземпляр и добавляю родительский элемент в свою сцену с помощью ActionScript.

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить доступ к файлам для детей, поскольку я не создавал их индивидуально (но они появляются на сцене). Когда я пытаюсь получить к ним доступ, появляется следующая ошибка.

Scene 1, Layer 'actions', Frame 1, Line 25, Column 14 1119: Access of possibly undefined property menuBg_mc through a reference with static type MenuIcon.

Я также попытался создать экземпляр дочерних элементов в классе родительских конструкторов и попытался их сослаться. Возникла следующая ошибка:

Scene 1, Layer 'actions', Frame 1, Line 25, Column 14 1119: Access of possibly undefined property menuBg_mc through a reference with static type MenuIcon.

Не могли бы вы направить меня на то, что я должен делать и почему? Am есть код AS3, который я использовал.

в первом кадре 1

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(); 
     } 

    } 

} 

Am использование Actionscript 3 и Flash Professional CC (15.0.0.173)

Привет, Эзгюры Ersil. Благодарю. Я попробовал ваше предложение, и теперь декларация кажется прекрасной. Моя проблема заключается в том, что я не уверен, как получить доступ к детям, чтобы изменить их свойства.

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; 
    } 
    } 
} 

Am получаю сообщение об ошибке при выполнении hoverBtn():

TypeError: Error #1009: Cannot access a property or method of a null object reference. at MenuIcon/hoverBtn()

Я также попытался изменить базовый класс детей к классу MenuIcon. Но это тоже не работает.

Непонятно, почему это происходит. Если есть родительский клип с несколькими дочерними элементами, должны ли дети быть индивидуально созданы или создать экземпляр родительского клипа? Если нет, как мне это сделать?

ответ

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(); 
     } 
    } 
} 
Смежные вопросы