我是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类。但这似乎也不起作用。
我不清楚为什么会这样。如果有一个包含多个子节点的父剪辑,是应该单独实例化子节点还是实例化父剪辑就足够了?如果没有,我该怎么做呢?
答案 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();
}
}
}