处理(如标题所示)带有鼠标悬停的动态加载选项的菜单。
我看到的事件链(这可能是有缺陷的)是:
•使用循环为XML文件中的每个条目放置一个空的MovieClip,每次向下移动一些像素。我们将这些“条目”称为。
•在每个条目中添加一个textField(来自XML的文本),绘制一个alpha = 0的矩形(成为鼠标悬停时的高亮显示),然后从库中添加另一个动画片段。
•添加鼠标悬停& mouseout eventListeners到每个'entry',它将不可见的矩形设置为alpha = 1,并从库中更改text和movieclip的颜色。
以下是启动所有这一切的功能。 *编辑:修正了更多非常愚蠢的东西。
//Load List Options
function loadHighlight():void
{
var yTmp:Number = 0;
for (var i:Number = 0; i < photo_total; i++)
{
var Highlight:MovieClip = new MovieClip();
photoHighlights[i] = Highlight;
photoHighlights[i].addEventListener(MouseEvent.MOUSE_OVER, highlightOvr);
//Draw Invisible Rectangle
var rectngle:Shape = new Shape();
rectngles[i] = rectngle;
rectngles[i].graphics.beginFill (0x0DAC54);
rectngles[i].graphics.drawRect(0, 0, 1170, 144);
rectngles[i].graphics.endFill();
rectngles[i].alpha = 0;
rectngles[i].y=yTmp;
rectngles[i].x= 0;
photoHighlights[i].addChildAt(rectngles[i], 0);
//Load photosArray
var photoname = photo_data[i].@TEXT;;
var photolist:TextField = new TextField();
photosArray[i] = photolist;
photosArray[i].textColor = 0x0DAC54;
photosArray[i].x = 26.95;
photosArray[i].y = 92.65;
photosArray[i].embedFonts = true;
photosArray[i].antiAliasType = AntiAliasType.ADVANCED;
photosArray[i].defaultTextFormat = listformat;
photosArray[i].selectable = false;
photosArray[i].wordWrap = true;
photosArray[i].text = photoname;
photosArray[i].autoSize = TextFieldAutoSize.LEFT;
photosArray[i].mouseEnabled = false;
photoHighlights[i].addChildAt(photosArray[i], 1);
//Load thumbFrames
var thumbFrame:thmbFrame = new thmbFrame();
thumbFrame.x= 962;
thumbFrame.y= 21;
photoHighlights[i].addChildAt(thumbFrame, 1);
thmbFrames.push(thmbFrame);
MediaPage.photoSelect.photoList.addChild(photoHighlights[i]);
yTmp = yTmp + 153;
}
}
function highlightOvr(event:MouseEvent):void
{
event.target.rectngles.alpha=1;
event.target.photosArray.textColor = 0x000000;
event.target.thmbFrames.color = 0x000000;
event.target.addEventListener(MouseEvent.MOUSE_OUT, highlightOut);
}
function highlightOut(event:MouseEvent):void
{
event.target.rectngles.alpha = 0;
event.target.photosArray.textColor = 0x0DAC54;
event.target.thmbFrames.color = 0x0DAC54;
event.target.removeEventListener(MouseEvent.MOUSE_OUT, highlightOut);
}
现在的问题已经变成了回放放置的movieClips的子项。我知道这不对:
event.target.rectngles.alpha = 0;
我只是不知道是什么。如何引用生成的movieClips及其子代?
我知道有一种简单的方法可以做到这一点,但我不知道它是什么。
另外,根据ShaunHusain的回应,我这样做的方式似乎有些复杂。任何链接到明确措辞资源,解释更有效的方法来实现这一点非常感谢。
再次感谢, -T。
编辑:修正了我做过的一些非常愚蠢的事情。答案 0 :(得分:0)
我正在寻找的非常简单的答案是使用getChildAt命令。所以而不是:
function highlightOvr(event:MouseEvent):void
{
event.target.rectngles.alpha=1;
event.target.photosArray.textColor = 0x000000;
event.target.thmbFrames.color = 0x000000;
event.target.addEventListener(MouseEvent.MOUSE_OUT, highlightOut);
}
应该是:
function highlightOvr(event:MouseEvent):void
{
event.target.getChildAt(0).alpha=1;
event.target.getChildAt(1).textColor = 0x000000;
event.target.getChildAt(2).color = 0x000000;
event.target.addEventListener(MouseEvent.MOUSE_OUT, highlightOut);
}
我可能会补充说.color命令使用不正确。我试图将它应用到一个影片剪辑,而我需要用我想要的颜色创建一个新的ColorTransform变量,然后像这样应用它:
var MyColorTransform:ColorTransform = new ColorTransform();
MyColorTransform.color = 0x000000;
event.target.getChildAt(2).transform.colorTransform = MyColorTransform;